6 javascript swap destructuring ecmascript-6
我想使用解构赋值交换元组的元素,如下所示:
var a = [1,2];
[a[1], a[0]] = a;
Run Code Online (Sandbox Code Playgroud)
但是,这会产生[1, 1].
Babel编译为
a[1] = a[0];
a[0] = a[1];
Run Code Online (Sandbox Code Playgroud)
我原以为这应该编译为
let tmp0 = a[0];
let tmp1 = a[1];
a[0] = tmp1;
a[1] = tmp0;
Run Code Online (Sandbox Code Playgroud)
Traceur的行为与babel完全相同.所以我猜这是指定的行为?
我想把两个元素交换到位.这是唯一的方法......
let tmp = a[0];
a[0] = a[1];
a[1] = tmp;
Run Code Online (Sandbox Code Playgroud)
但我认为以上是解构分配应该让我避免不得不这样做.
我完全有能力颠倒数组的两个元素的顺序,所以这不是我的问题.我可以做一些简单的事情a.push(a.shift()),它符合交换到位的标准.
我最感兴趣的是为什么解构不会像它应该的那样运作.
我只是使用一个函数来做到这一点
let swap = ([a,b]) => [b,a];
swap([1,2]); // => [2,1]
Run Code Online (Sandbox Code Playgroud)