在MDN-运算符优先级上,后置自增a++
比前置自增++a
有更高的优先级,这是什么原因?
例如:
var a = 1;
var b = ++a;
//=> b = 2;
那么:
var a = 1;
var b = a++;
//=> b = 1;
a++
比前置自增++a
有更高的优先级,这是什么原因?例如:
var a = 1;
var b = ++a;
//=> b = 2;
那么:
var a = 1;
var b = a++;
//=> b = 1;
++a
优先级高于=
,而a--
优先级低于=
。这是什么原因呢?递增 (++)
递增运算符为其操作数增加1,返回一个数值。
如果后置(postfix)使用,即运算符位于操作数的后面(如 x++),那么将会在递增前返回数值。
如果前置(prefix)使用,即运算符位于操作数的前面(如 ++x),那么将会在递增后返回数值。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
javascript中的运算符优先级,你可以理解为结合优先级,javascript永远是从左向右执行。
赋值表达式中
=
和++
的优先级关系不成立,不会因为++
优先级高,而先于=
计算,只是先于结合。=
的运算方法查看ECMAScript 5.1 中 11.3.1b = ++a;
可以理解为:而
b = a++;
可以理解为:可以参考 ECMAScript 5.1 规范(中文版部分规则缺失):
中文版:http://lzw.me/pages/ecmascrip...英文版:http://www.ecma-international...
附录D中有说明:
ECMAScript 中所有代码均为从左到右进行执行(评估顺序 evaluation order) ,如果你的函数中有副作用时,例如问题中的代码,则可以明确观察到“从左到右”。例如该问题:
https://segmentfault.com/q/10...
运算符优先级和评估顺序是2个不同的概念,
sqrt(9) + sqrt(16) * sqrt(25)
中乘法先运行时错误的,表达式总是从左到右运行,只是遇到*
运算符时,会优先结合。执行过程类似如下: