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

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

当前回答

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

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

其他回答

我知道有两种方法: 1. 返回为数组 2. 返回为对象

下面是我找到的一个例子:

<script>
// Defining function
function divideNumbers(dividend, divisor){
    var quotient = dividend / divisor;
    var arr = [dividend, divisor, quotient];
    return arr;
}

// Store returned value in a variable
var all = divideNumbers(10, 2);

// Displaying individual values
alert(all[0]); // 0utputs: 10
alert(all[1]); // 0utputs: 2
alert(all[2]); // 0utputs: 5
</script>



<script>
// Defining function
function divideNumbers(dividend, divisor){
    var quotient = dividend / divisor;
    var obj = {
        dividend: dividend,
        divisor: divisor,
        quotient: quotient
    };
    return obj;
}

// Store returned value in a variable
var all = divideNumbers(10, 2);

// Displaying individual values
alert(all.dividend); // 0utputs: 10
alert(all.divisor); // 0utputs: 2
alert(all.quotient); // 0utputs: 5
</script>

除了像其他人推荐的那样返回一个数组或对象,你还可以使用一个收集器函数(类似于在the Little Schemer中找到的那个):

function a(collector){
  collector(12,13);
}

var x,y;
a(function(a,b){
  x=a;
  y=b;
});

我做了一个jsperf测试,看看这三个方法中哪一个更快。数组是最快的,收集器是最慢的。

http://jsperf.com/returning-multiple-values-2

function a(){
  var d = 2;
  var c = 3;
  var f = 4;
  return {d: d, c: c, f: f};
}

然后使用

const {d, c, f} = a();

新版本:

function a(){
  var d = 2;
  var c = 3;
  var f = 4;
  return {d, c, f}
}

在javascript中返回多个值的一个非常常见的方法是使用一个对象字面量,所以像这样:

const myFunction = () => {
  const firstName = "Alireza", 
        familyName = "Dezfoolian",
        age = 35;
  return { firstName, familyName, age};
}

然后得到这样的值:

myFunction().firstName; //Alireza
myFunction().familyName; //Dezfoolian
myFunction().age; //age

或者更短的方式:

const {firstName, familyName, age} = myFunction();

把它们分开,比如:

firstName; //Alireza
familyName; //Dezfoolian
age; //35

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

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正确输入也稍微困难一些。