使用解构赋值交换元组元素

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()),它符合交换到位的标准.

我最感兴趣的是为什么解构不会像它应该的那样运作.

Tha*_*you 7

我只是使用一个函数来做到这一点

let swap = ([a,b]) => [b,a];

swap([1,2]); // => [2,1]
Run Code Online (Sandbox Code Playgroud)