我试图在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 syntax*,你还可以更直观地对返回值进行结构化。
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开始使用"destructuring assignments"来做这个。 请注意,这些东西在较早的Javascript版本中是不可用的(意思是--ECMAScript第三版和第五版都不可用)。
它允许你同时对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允许你 "返回1,2,... "的事实所迷惑。真正发生的情况并不是看起来那样。返回语句中的表达式--1, 2, 3
--只不过是一个逗号运算符,依次应用于数字字元(1
、2
和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);