JavaScript函数返回多个值作为ES6中的对象
为什么我会收到关于JavaScript函数返回多个值作为ES6中的对象,javascript,ecmascript-6,Javascript,Ecmascript 6,为什么我会收到关于p1,q1值为未定义的的错误消息?但是,以下代码给出了预期结果: function function_name() { var a=1; var b=2; return {a, b} } let {p1, q1} = function_name() 有谁能解释一下这两个代码示例之间的区别吗?这是一种解构,它使用花括号中的键获取赋值的同一键的值。您的函数重新启动一个对象 var o = {p: 42, q: true}; var {p, q}
p1
,q1
值为未定义的的错误消息?但是,以下代码给出了预期结果:
function function_name()
{
var a=1;
var b=2;
return {a, b}
}
let {p1, q1} = function_name()
有谁能解释一下这两个代码示例之间的区别吗?这是一种解构,它使用花括号中的键获取赋值的同一键的值。您的函数重新启动一个对象
var o = {p: 42, q: true};
var {p, q} = o;
console.log(p); // 42
console.log(q); // true
然后,您希望获得名称为p1
和p2
的属性。显然,对象中没有具有此名称的键,因此结果中没有属性
{ a: 1, b: 2 }
工作示例
{ a: 1, b: 2 } => get { p1 and p2 } => {}
与其他财产
{ p: 42, q: true } => get { p and q } => { p: 42, q: true }
您获得了所需的输出,因为函数_name()返回一个对象,该对象有两个变量a和b,两个变量都有一些值
{ p: 42, q: true, foo: 42 } => get { p and q } => { p: 42, q: true }
这里return{a,b}
相当于return{a:a,b:b}
相当于return{a:1,b:2}
要获得确切值,您需要将调用方法签名更新为:
function function_name()
{
var a=1;var b=2;
return {a,b}
}
注意:使用a或b作为变量名不是一个好的做法。您应该使用有效的名称 像这样使用
let {a, b} = function_name()
以数组形式返回多个值是否使用巴贝尔transpiler?您正在测试哪个版本的浏览器?您的答案根本无法解释OP中的问题。另外,一般来说,提供一个代码示例是好的,但它应该是a)尽可能简单,b)代码示例应该附带一个解释,说明为什么您的示例有效,而OP中的示例无效。
function function_name()
{
var a=1;
var b=2;
return [a, b]
}
let [p1, q1] = function_name()