You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JavaScript函数仅返回第二个值?如何实现多值返回?

JavaScript函数返回多个值的问题解析

我是JavaScript新手,但有其他编程语言经验。尝试让一个函数返回两个值却未能成功,发现当前语法下函数仅返回第二个指定值,想了解该现象的原因,同时想知道如何让JavaScript函数返回多个值。

我的代码

var a;
    
var b;
var c;
    
var d = false;
var e = "";
    
var f = "";
    
var g = false;

a = returnTwoValues();
console.log("A: " + a);
    
b, c = returnTwoValues();
console.log("B: " + b);
console.log("C: " + c);
    
d, e = returnTwoValues();
console.log("D: " + d);
console.log("E: " + e);
    
f = returnTwoValues();
console.log("F: " + f);
    
g = returnTwoValues();
console.log("G: " + g);

function returnTwoValues(){
  return true, "Hello";
}

输出结果

"A: Hello"
"B: undefined"
"C: Hello"
"D: false"
"E: Hello"
"F: Hello"
"G: Hello"

修改函数后的情况

即使把函数改成以下代码,输出结果也完全一致:

function returnTwoValues(){
  return "Hi", "Hello";
}

问题原因

这是因为你用到了JavaScript的逗号运算符。逗号运算符的规则是:依次计算逗号分隔的每一个表达式,最终返回最后一个表达式的结果。

  • 在return true, "Hello"里,JavaScript会先计算true这个表达式,但不会把它作为返回值,最后只返回"Hello";换成"Hi", "Hello"也是同理,最终返回最后一个值。
  • 赋值语句里的b, c = returnTwoValues()同样是逗号运算符在起作用:b只是被“计算”了一遍(没有被赋值),所以保持初始的undefined;而c被赋值为函数返回的最后一个值"Hello"。
  • d, e = returnTwoValues()里,d已经提前赋值为false,逗号运算符这里只是读取了d的值,没有重新赋值,所以d还是false,e则被赋值为函数返回值。

实现函数返回多个值的方法

JavaScript函数本身不能直接返回多个值,但可以通过以下几种方式间接实现:

1. 返回对象

把需要返回的多个值封装成对象的属性,调用时可以直接访问属性,或者用解构赋值快速获取:

function returnTwoValues() {
  return {
    status: true,
    content: "Hello"
  };
}

// 方式1:直接访问对象属性
const result = returnTwoValues();
console.log(result.status); // true
console.log(result.content); // Hello

// 方式2:解构赋值
const { status, content } = returnTwoValues();
console.log(status); // true
console.log(content); // Hello

2. 返回数组

把多个值放在数组里返回,调用时用数组解构赋值获取每个值:

function returnTwoValues() {
  return [true, "Hello"];
}

// 解构赋值获取数组元素
const [isSuccess, message] = returnTwoValues();
console.log(isSuccess); // true
console.log(message); // Hello

3. 通过引用类型参数传递

如果需要修改外部变量,可以传入对象或数组这类引用类型,在函数内部修改它们的属性或元素:

function setTwoValues(target) {
  target.status = true;
  target.message = "Hello";
}

const obj = {};
setTwoValues(obj);
console.log(obj.status); // true
console.log(obj.message); // Hello

内容的提问来源于stack exchange,提问作者wil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:44:54