在分配和递增值时澄清JavaScript运算符优先级

时间:2013-05-23 21:10:26

标签: javascript operator-precedence

尽管我已经使用JavaScript了很长一段时间,但我最近才开始阅读operator precedence,但是我偶然发现了一些我无法找到答案的墙。

考虑以下示例:

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吗?

这是一个accompanying Fiddle

4 个答案:

答案 0 :(得分:3)

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

因此,这不仅仅是运营商的优先权。相反,它是运算符的基本语义。

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

前后增量是C编程语言的一部分,也许是一种或多种早期语言。一些计算机指令集具有寻址模式,其行为使人联想到前后增量的影响。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

变量之前放置++ 是前缀增量。返回递增的值。这与运算符优先级无关。

Further reading

答案 3 :(得分:0)

这是因为++xx++ 相同。

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