尽管我已经使用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
如果++x
和x++
具有相同的关联性,那么y
在这种情况下会变成2
吗?
这是一个accompanying Fiddle。
答案 0 :(得分:3)
++
运算符在 变量或属性引用后出现后增量操作。这意味着++
子表达式的值是之前的值。
因此,这不仅仅是运营商的优先权。相反,它是运算符的基本语义。
当++
在变量或属性引用之前出现时,它是预增量。这意味着子表达式的值是变量或属性的已增量值。
前后增量是C编程语言的一部分,也许是一种或多种早期语言。一些计算机指令集具有寻址模式,其行为使人联想到前后增量的影响。
答案 1 :(得分:2)
x++
是一个后增量。它返回当前值x
和然后将其递增1。另一方面,++x
是预增量。它将x
的值增加1,然后返回x
的当前值。
答案 2 :(得分:1)
答案 3 :(得分:0)
这是因为++x
和x++
不相同。
++x
会增加x
并返回新值 x++
增加x
并返回原始值