澄清JavaScript操作符在赋值和加值时的优先级

Clarification on JavaScript operator precedence when assigning and incrementing values

本文关键字:优先级 JavaScript 操作符 赋值 澄清      更新时间:2023-09-26

尽管使用JavaScript已经有一段时间了,但我最近才开始阅读有关操作符优先级的内容,然而我偶然发现了一些问题,我似乎找不到答案。

考虑下面的例子:

x=1;      // x === 1
x++;      // x === 2
x=1;      // x === 1
y=x++;    // x === 2, y === 1

如果++的优先级高于=,为什么y没有变成2 ?

现在考虑:

x=1;      // x === 1
y=++x;    // x === 2, y === 2

如果++xx++具有相同的结合律,那么在这种情况下,y 如何成为2 ?

++操作符,当出现在变量或属性引用之后时,是递增后操作。这意味着++子表达式的值是之前的值

因此这里不仅仅是操作符优先级在起作用。相反,它是操作符的基本语义。

++在变量或属性引用之前出现时,它是预增量。这意味着子表达式的值是变量或属性已经增加的值。

前递增和后递增是C编程语言的一部分,可能是一种或多种更早的语言。有些计算机指令集具有寻址模式,其行为使人想起前递增和后递增的效果。

x++是后增量。它返回x的当前值,然后将其加1。另一方面,++x是一个预增量。它将x的值加1,然后,然后返回x的当前值

++ 放在变量之后执行后缀递增。变量是递增的,但是在表达式中返回旧的值。

++ 放在变量之前是前缀递增。返回增加后的值。这与操作符优先级无关。

进一步阅读

这是因为++xx++ 不是

  • ++x增加x并返回新值
  • x++增加x并返回原始值