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

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

当前回答

你可以使用Object

function newCodes(){
    var obj= new Object();
    obj.dCodes = fg.codecsCodes.rs;
    obj.dCodes2 = fg.codecsCodes2.rs;

    return obj;
}

其他回答

从ES6开始,你可以这样做

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

let {dCodes, dCodes2} = newCodes()

返回表达式{dCodes, dCodes2}是属性值的简写,等价于这个{dCodes: dCodes, dCodes2: dCodes2}。

最后一行的赋值叫做对象析构赋值。它提取对象的属性值并将其赋值给同名变量。如果你想把返回值赋给不同名称的变量,你可以这样做let {dCodes: x, dCodes2: y} = newCodes()

另一个值得一提的是新引入的(ES6)语法,除了析构赋值,还使用了对象创建简写。

function fun1() {
  var x = 'a';
  var y = 'b';
  return { x, y, z: 'c' };
  // literally means { x: x, y: y, z: 'c' };
}

var { z, x, y } = fun1(); // order or full presence is not really important
// literally means var r = fun1(), x = r.x, y = r.y, z = r.z;
console.log(x, y, z);

这个语法可以用babel或其他旧浏览器的js polyfiller填充,但幸运的是,现在本机适用于最新版本的Chrome和Firefox。

但是在创建一个新对象时,这里涉及到内存分配(以及最终的gc负载),因此不要期望从它那里获得太多性能。JavaScript不是开发高度优化的东西的最佳语言,但如果需要,你可以考虑将结果放在周围的对象上,或者是JavaScript、Java和其他语言之间常见的性能技巧。

不能,但是你可以返回一个包含你的值的数组:

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

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

const [first, second] = getValues()

这被称为解构赋值,每个主要的JS环境都支持它。它等价于如下:

const values = getValues()
const first = values[0]
const second = values[1]

如果你想给每个值赋一个名字,你也可以返回一个对象:

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

要访问它们:

const {first, second} = getValues()

也就是:

const values = getValues()
const first = values.first
const second = values.second

强烈建议返回一个对象而不是数组,除非值作为简单的元组有意义,例如,坐标对[x, y]。使用数组时,很容易忘记哪个值是哪个值,以后更难添加更多的值,而且使用TypeScript或JSDoc正确输入也稍微困难一些。

我并不是在这里添加新内容,而是另一种替代方法。

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

使用模板字面量' ${}'可以返回一个包含许多值和变量的字符串

如:

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

它既简短又简单。