JavaScript函数在ES6中将多个值作为对象返回

use*_*451 8 javascript ecmascript-6

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

    return {a, b} 
}

let {p1, q1} = function_name()
Run Code Online (Sandbox Code Playgroud)

为什么我得到有关的价值观的错误信息p1,q1undefined?但是,下面的代码给出了预期的结果:

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

 console.log(p); // 42
 console.log(q); // true
Run Code Online (Sandbox Code Playgroud)

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

Pra*_*dey 16

您正在获得所需的输出,因为function_name()返回的对象具有两个变量a和b具有一些值.

function function_name()
{
    var a=1;var b=2;
    return {a,b} 
}
Run Code Online (Sandbox Code Playgroud)

return {a, b}相当于return {a: a, b: b}相当于return {a: 1, b: 2}

要获得将调用方法签名更新为以下所需的确切值:

let {a, b} = function_name()
Run Code Online (Sandbox Code Playgroud)

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


Nin*_*olz 5

它是一个解构,它使用大括号中的键来获取具有相同键的赋值的值.您的函数返回一个对象

{ a: 1, b: 2 }
Run Code Online (Sandbox Code Playgroud)

然后你想要获得名称p1和属性的属性p2.显然,对象中没有带有此名称的键,因此结果中没有属性.

{ a: 1, b: 2 } => get { p1 and p2 } => {}
Run Code Online (Sandbox Code Playgroud)

工作实例

{ p: 42, q: true } => get { p and q } => { p: 42, q: true }
Run Code Online (Sandbox Code Playgroud)

与另一个属性

{ p: 42, q: true, foo: 42 } => get { p and q } => { p: 42, q: true }
Run Code Online (Sandbox Code Playgroud)