var a = {n:1}; a.x = a = {n:2}; alert(a.x);// --> undefined alert(b.x);// --> {n:2}
about這道題答案挺多的,我理解這涉及兩個過程即求值過程和運算過程,求值過程都是從左到右,而運算過程有本身的運算順序javascript
a.x = a = {n:2};
這條語句中a.x a 和 {n:2}分別是三個表達式,須要先對他們求值,而後纔會進行賦值操做,求值過程是先於賦值過程的java
下表列出了 JavaScript 運算符,並按優先級順序從高到低排列。 具備相同優先級的運算符按從左至右的順序計算。 運算符 說明 .[ ] ( ) 字段訪問、數組索引、函數調用和表達式分組 ++ -- - ~ ! delete new typeof void 一元運算符、返回數據類型、對象建立、未定義的值 * / % 相乘、相除、求餘數 + - + 相加、相減、字符串串聯 << >> >>> 移位 < <= > >= instanceof 小於、小於或等於、大於、大於或等於、是否爲特定類的實例 == != === !== 相等、不相等、全等,不全等 & 按位「與」 ^ 按位「異或」 | 按位「或」 && 邏輯「與」 || 邏輯「或」 ?: 條件運算 = OP= 賦值、賦值運算(如 += 和 &=) , 多個計算