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

标签 javascript variable-assignment destructuring

由于后缀 ++ 存在于语言中,以下将始终使 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

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

最佳答案

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

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

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

关于javascript - 为什么解构赋值的右侧会忽略其左侧的索引增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65386366/

相关文章:

javascript - 如何在节拍器计数器中手动设置/更改步骤

matlab - 如何在 MATLAB 中使用线性索引为 4 维矩阵的对角线赋值?

function - Matlab 中带有函数名的变量的警告

reference - 循环变量前的 `&`有什么作用?

javascript - 将数据分离到类框中

javascript - Ajax 路径适用于一个数组,但不适用于另一个数组

javascript - 为 mvc 绑定(bind)展平复杂的 json 对象

r - R Shiny 中响应式(Reactive)表达式中的全局赋值?

destructuring - Hylang 映射解构

Javascript - React 解构数组