代码改变世界

javascript运算符优先级

2015-06-17 15:05  厘澄  阅读(247)  评论(0编辑  收藏  举报
var a = {n:1};  
a.x = a = {n:2};  
alert(a.x);// --> undefined  
alert(b.x);// --> {n:2}

about这道题答案挺多的,我理解这涉及两个过程即求值过程和运算过程,求值过程都是从左到右,而运算过程有自己的运算顺序

a.x = a = {n:2}; 

这条语句中a.x a 和 {n:2}分别是三个表达式,需要先对他们求值,然后才会进行赋值操作,求值过程是先于赋值过程的

下表列出了 JavaScript 运算符,并按优先级顺序从高到低排列。 具有相同优先级的运算符按从左至右的顺序计算。
运算符
说明
.[ ] ( )        字段访问、数组索引、函数调用和表达式分组
++ -- - ~ ! delete new typeof void      一元运算符、返回数据类型、对象创建、未定义的值
* / %   相乘、相除、求余数
+ - +   相加、相减、字符串串联
<< >> >>>   移位
< <= > >= instanceof    小于、小于或等于、大于、大于或等于、是否为特定类的实例
== != === !==   相等、不相等、全等,不全等
&   按位“与”
^   按位“异或”
|   按位“或”
&&  逻辑“与”
||  逻辑“或”
?:  条件运算
= OP=   赋值、赋值运算(如 += 和 &=)
,   多个计算