一尘不染

ES6阵列破坏性怪异

javascript

谁能解释,为什么ES6阵列解构会发生以下情况?

let a, b, c
[a, b] = ['A', 'B']
[b, c] = ['BB', 'C']
console.log(`a=${a} b=${b} c=${c}`)

// expected: a=A b=BB c=C
// actual:   a=BB b=C c=undefined

阅读 250

收藏
2020-05-01

共1个答案

一尘不染

正如其他人所说,您缺少分号。但…

谁能解释?

let a = undefined, b = undefind, c = undefined;
[a, b] = (['A', 'B']
[(b, c)] = ['BB', 'C']);
console.log(`a=${a} b=${b} c=${c}`);

其中

  • [a, b] = …; 是预期的解构任务
  • (… = ['BB', 'C']) 是一个赋值表达式,将数组分配到左侧,并对数组求值
  • ['A', 'B'][…]是对数组文字的属性引用
  • (b, c)正在使用逗号运算符,计算结果为c(是undefined

如果你想省略分号,让那里的人永远自动插入 可能 需要的话,你将需要把一个在开始每一行的是开头([/+-或```。

2020-05-01