2017-06-18 89 views
3
function function_name() 
{ 
    var a=1; 
    var b=2; 

    return {a, b} 
} 

let {p1, q1} = function_name() 

为什么我得到有关的p1值的错误消息,q1undefined?但是,下面的代码给出了预期的结果:JavaScript函数返回多个值作为对象在ES6

var o = {p: 42, q: true}; 
var {p, q} = o; 

console.log(p); // 42 
console.log(q); // true 

任何人都可以解释这两个代码示例之间的区别吗?

+0

您是否在使用babel转译器?您正在测试哪个版本的浏览器? – meteorzeroo

回答

8

你得到期望的输出,因为函数名()返回了由具有两个变量的对象,并且具有一些值b 。

function function_name() 
{ 
    var a=1;var b=2; 
    return {a,b} 
} 

这里return {a, b}相当于return {a: a, b: b}等同于return {a: 1, b: 2}

要得到你需要更新您的调用方法签名的确切值:

let {a, b} = function_name() 

注意:这是不是一个使用a或b作为变量名称的好习惯。你应该使用有效的名字。

5

这是一个解构,它使用大括号中的键来获取与赋值相同的键的值。你的功能retuns对象

{ a: 1, b: 2 } 

,然后你想用的名字p1p2获取属性。显然,对象中没有这个名称的键,因此结果中没有属性。

{ a: 1, b: 2 } => get { p1 and p2 } => {} 

工作实施例

{ p: 42, q: true } => get { p and q } => { p: 42, q: true } 

与另一属性

{ p: 42, q: true, foo: 42 } => get { p and q } => { p: 42, q: true }