猛跑小豬
2018-10-18 18:10:18
var obj = { a: 1};obj.b = obj = { c: 2};console.log(obj.b);//undefinedobj.b 為何輸出undefined ?
1 回答

holdtom
TA貢獻(xiàn)1805條經(jīng)驗 獲得超10個贊
其實這個東西這么解釋會清楚點:
.
的優(yōu)先級是高于=
的,所以整個等式先計算.
的運算
根據(jù)上面,所以整個等式第一步是先添加一個b
的地址,等式大概變成這個樣子[obj.b的地址]=obj={c:2}
=
是從右向左運算的,而且是把=
號右邊的那個賦值給左邊的
所以,變形后的等式運算時分為兩步obj={c:2}
,然后[obj.b的地址]=obj
。
由于第一步的時候,obj
已經(jīng)指向新的地址,所以和[obj.b的地址]
中的obj
已經(jīng)不是同一個。
所以,第二步的時候,[obj.b的地址]=obj
是把新的obj
賦值給原本obj.b的地址。
所以才會出現(xiàn)obj
輸出{c:2}
的情況。
更清晰一點,看看一個代碼:
var obj = {
a: 1
};
var obj2 = obj;
obj.b = obj = {
c: 2
};
console.log(obj); // {c:2}
console.log(obj2); // { a:1, b:obj }
添加回答
舉報
0/150
提交
取消