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= 赋值、赋值运算(如 += 和 &=) , 多个计算