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