为什么在解构赋值语句右侧忽略了左侧部分的索引增量?

3
自从后缀 ++ 存在于编程语言中,以下代码将始终使得 v[0] ← v[1]:
v = [8, 7, 6, 5];
i = 0;

v[i++] = v[i];

console.log(v[0]); // gives 7

现在有了解构赋值,情况就不同了——我只能在Chrome和Firefox中进行测试:

v = [8, 7, 6, 5];
i = 0;

[v[i++]] = [v[i]]; // does "v[0] ← v[0]"

console.log(v[0]); // gives 8

两者最终都将得到期望值为1的 。我尝试了在解构赋值的左侧使用许多其他类型的变量赋值,但每次都被主要解构赋值的右侧忽略。然后,在解构之后,新的变量值回到了原处。为什么呢?
1个回答

1

JavaScript通常从左到右进行解释,这就是v[i++] = v[i];中发生的情况。

只有在解构赋值中,目标值在值之后进行求值计算,因为在默认情况下,求值计算可能取决于值本身。事先评估属性名称可能是可能的,但会更加复杂,导致表面上的不一致。

无论如何,只要不要在属性名称计算中改变变量,这会让读者感到困惑,无论您是否知道确切的语义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接