首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于ES6数组破坏和交换的有趣行为

关于ES6数组破坏和交换的有趣行为
EN

Stack Overflow用户
提问于 2018-03-15 06:15:17
回答 1查看 718关注 0票数 2

我刚刚注意到,以下代码(在let [one, two] = [1, 2]之后没有立即引用let [one, two] = [1, 2])尝试[one, two] = [two, one]会崩溃:

代码语言:javascript
复制
let [one, two, three] = [1, 2, 3]
[one, two] = [two, one] // CRASH! one is not defined
console.log(one, two)

但是,简单地在声明和交换之间添加一个未使用的one突然允许代码,但不正确:

代码语言:javascript
复制
let [one, two, three] = [1, 2, 3]
one // inserted here
[one, two] = [two, one] // no longer crashes! but not actually swapping
console.log(one, two) // should be '2 1', but shows '1 2' instead

而下面的代码给出了预期的交换效果

代码语言:javascript
复制
var a = 1;
var b = 3;

[a, b] = [b, a];
console.log(a); // 3
console.log(b); // 1

有人能解释为什么这样的行为存在吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-03-15 06:22:03

因为它被解析成这样:

代码语言:javascript
复制
 let [one, two, three] = [1, 2, 3][one, two] = [one, two]

要使它发挥作用,总是用父母来破坏任务:

代码语言:javascript
复制
 let [one, two, three] = [1, 2, 3];
 ([one, two] = [two, one]);
 console.log(one, two);

永远不要相信ASI,如果它出了问题,就会出现这样的情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49292669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档