为什么解构赋值的右侧会忽略其左侧部分的索引增量

问题描述

由于后缀 ++ 存在于语言中,以下总是使 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,5];
i = 0;

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

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

两者都以 i 预期值 1 结束。我在解构赋值的左侧尝试了许多其他的变量赋值之王,并且一直以来,那些变量赋值都被右侧的变量赋值忽略了主要解构之一。然后在解构之后,新的变量值又回到了那里。为什么?

解决方法

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

仅在解构赋值中,目标在值之后进行评估,因为在默认情况下,评估可能取决于值本身。事先评估属性名称可能是可能的,但会更复杂,导致明显的不一致。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...