协慌网

登录 贡献 社区

在 JavaScript 中返回多个值?

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

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

答案

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

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。

您可以从 Javascript 1.7 开始使用“解构分配” 进行此操作 。请注意,这些在较旧的 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 1, 2, ...的事实所迷惑。真正发生的事情似乎并不存在。 - 在返回语句的表达式1, 2, 3 - 只不过是施加于数字文字逗号运算符( 12 ,和3 )按顺序,最终计算结果为它的最后的表达式的值 - 3 。这就是为什么return 1, 2, 3在功能上完全相同,只是return 3相同。

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

只需返回一个对象文字

function newCodes(){
    var dCodes = fg.codecsCodes.rs; // Linked ICDs  
    var dCodes2 = fg.codecsCodes2.rs; //Linked CPTs       
    return {
        dCodes: dCodes, 
        dCodes2: dCodes2
    };  
}


var result = newCodes();
alert(result.dCodes);
alert(result.dCodes2);