【问题标题】:Why the right side of a destructuring assignment ignores an index increment made in its left part为什么解构赋值的右侧会忽略左侧的索引增量
【发布时间】:2021-03-30 20:07:54
【问题描述】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 2014-10-25
      • 1970-01-01
      • 2019-03-16
      • 2023-04-10
      • 2016-06-08
      • 1970-01-01
      相关资源
      最近更新 更多