谁能解释,为什么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'][…]是数组文字
  • 上的property reference
  • (b, c)正在使用comma operator,求值为c(即undefined)

  • 如果要省略分号并在可能的情况下自动插入分号,则将以([/+-`开头的每一行的need to put one at the begin

    09-15 12:02