【问题标题】:I don't quite get a javascript syntax about passing arguments我不太了解有关传递参数的 javascript 语法
【发布时间】:2018-11-25 00:54:28
【问题描述】:

我的代码:

const users = [ { id: 1, name: 'user1' }, { id: 2, name: 'user2' } ]

p = new Promise( resolve => resolve(users) )

p.then( (user) => console.log(user) )   

将以下日志返回给我:

[ { id: 1, 名称: 'user1' }, { id: 2, 名称: 'user2' } ]

如果我改变它如下,

users.then( ([user]) => console.log(user) ) 

我收到以下日志:

{ id: 1, name: 'user1' }

我不太明白为什么第二个只记录数组中的第一个元素。

【问题讨论】:

  • users.then( ([user1, user2]) => console.log(user1, user2) ) - 这会记录两个用户。
  • 因为 [user] 使用的方式是破坏性的,即从数组中获取第一项并为其命名为 user

标签: javascript node.js syntax parameters arguments


【解决方案1】:

这是destructuring assignment

[a, b, c] = [1, 2, 3]

console.log(a)
console.log(b)
console.log(c)

但如果你只解构一个,你会得到数组的第一个值

[a] = [1, 2, 3]

console.log(a)

至于你的例子,解构可以在很多地方完成,比如函数参数

【讨论】:

  • 感谢您提供一个简单但非常有用的答案
【解决方案2】:

DestructuringES6 又名 ECMA2015 功能。

您可以解构ArrayObjects


Object 解构如下,允许您使用简单的语法从object 中获取您想要获取的keys

const obj = {
  a: 'a',
  b: 'b',
  c: 'c',
};

// Without object destructuring
const a_ = obj.a;
const b_ = obj.b;


// With object destructuring
const {
  a,
  b,
} = obj;

console.log(a);

Array解构也是大同小异,只不过不是指定要获取的keys,而是使用数据的index

const arr = [
  'a',
  'b',
  'c',
];

// Without array destructuring
const a_ = arr[0];
const c_ = arr[2];

// With array destructuring
const [
  a, , c,
] = arr;

console.log(c);

您可以在任何地方使用ArrayObject 解构;包括在函数参数中。在这种情况下特别好,因为您可以轻松地将default 值分配给keys,如下所示

function func({
  a,
  b,
  c = 'default',
}) {
  console.log(a, '/', b, '/', c);
}

func({
  a: 'j\'aime la france',
  b: 'vive les baguettes',
});

【讨论】:

  • 太棒了,我现在完全明白了。感谢您提供许多示例
猜你喜欢
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多