在 JavaScript 中返回多个值?

我试图在JavaScript中返回两个值。这可能吗?

var newCodes = function() {  
    var dCodes = fg.codecsCodes.rs;
    var dCodes2 = fg.codecsCodes2.rs;
    return dCodes, dCodes2;
};

答案 1

否,但您可以返回一个包含您的值的数组:

function getValues() {
    return [getFirstValue(), getSecondValue()];
}

然后,您可以像这样访问它们:

var values = getValues();
var first = values[0];
var second = values[1];

使用最新的 ECMAScript 6 语法*,您还可以更直观地分解返回值:

const [first, second] = getValues();

如果要在每个返回值上放置“标签”(更易于维护),则可以返回一个对象:

function getValues() {
    return {
        first: getFirstValue(),
        second: getSecondValue(),
    };
}

要访问它们:

var values = getValues();
var first = values.first;
var second = values.second;

或者使用 ES6 语法:

const {first, second} = getValues();

* 请参阅此表了解浏览器兼容性。基本上,除了IE之外,所有现代浏览器都支持这种语法,但是你可以在构建时使用Babel等工具将ES6代码编译为与IE兼容的JavaScript。


答案 2

从 ECMAScript 6 开始,您可以使用数组和“解构赋值”来执行此操作。请注意,这些在较旧的Javascript版本中不可用(这意味着 - 无论是ECMAScript 3rd还是5th版本)。

它允许您同时分配1个以上的变量:

var [x, y] = [1, 2];
x; // 1
y; // 2

// or

[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4

您还可以将对象解构与属性值速记结合使用,以命名对象中的返回值并挑选出所需的值:

let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3

顺便说一句,不要被 ECMAScript 允许您这样做的事实所愚弄。那里真正发生的事情并不是看起来的样子。return 语句中的表达式 — — 只不过是按顺序应用于数字文本 ( 、 和 ) 的逗号运算符,其最终计算结果为其最后一个表达式的值 — 。这就是为什么在功能上与.no more相同的原因。return 1, 2, ...1, 2, 31233return 1, 2, 3return 3

return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;