谁能解释,为什么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
http://codepen.io/ronkot/pen/WxRqXg?editors=0011
最佳答案
正如其他人所说,您缺少分号。但…
您的各行之间没有semicolons automatically inserted来分隔“两个”语句,因为它作为单个语句有效。它被解析(并评估)为
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)
正在使用comma operator,求值为c
(即undefined
)如果要省略分号并在可能的情况下自动插入分号,则将以
(
,[
,/
,+
,-
或`
开头的每一行的need to put one at the begin。