javascript - ES6 数组解构怪异

标签 javascript ecmascript-6

谁能解释一下,为什么 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

最佳答案

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

Can anyone explain?

没有 semicolons automatically inserted在你的行之间分隔“两个”语句,因为它作为单个语句有效。它被解析(和评估)为

let a = undefined, b = undefined, 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(未定义)

如果您想省略分号并让它们自动插入可能需要的地方,您将need to put one at the start(, [, /, +, - 开头的每一行或 `

关于javascript - ES6 数组解构怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38050219/

相关文章:

javascript - 如何从 HTML 表单中收集所有值?

javascript - 为什么 ES 6's Map.forEach iterate with ' value, key' 而不是 'key, value' ?

javascript - 在javascript中设置对象的默认值

javascript - 这不会访问 http 响应对象 :property does not exist on type Object

javascript - 如何仅在 ES2015 中生成从 0 到 n 的数字范围?

javascript - 如何返回许多 Promise 并在做其他事情之前等待它们全部

javascript - 未捕获的类型错误 : Cannot read property 'checked' of undefined Javascript

javascript - ng-app、ng-repeat、ng Controller 等……从 HTML DOM Angular 来看它们是什么以及 JS 如何访问它们?

javascript - 如何在 CKFinder 中启用多选图像?

javascript - 匹配打开和关闭的 html 标签的正则表达式