鍍金池/ 問答/人工智能  HTML/ 先console.log(obj),后給obj添加屬性,為什么可以打印出屬性?

先console.log(obj),后給obj添加屬性,為什么可以打印出屬性?

先看一段代碼:

var obj={b:2};
console.log(obj.a);
console.log(obj);
obj.a=1;
console.log(obj);

這三個(gè) console.log() 分別輸出如下結(jié)果:
圖片描述

第一個(gè) undefined 我可以理解,但是第二個(gè)為什么可以輸出 a:1,而且還可以看出第二個(gè)和第三個(gè)打印的結(jié)果有個(gè)明顯區(qū)別:第一個(gè)大括號里只有 b:2,而第二個(gè)全部輸出。

求大神解惑?

回答
編輯回答
別瞎鬧

我覺得可能是,你不展開的時(shí)候,上面就是顯示當(dāng)時(shí)結(jié)果字面量輸出了,你展開了,下面這個(gè)就指向了這個(gè)obj的內(nèi)存地址,里面確實(shí)多了一個(gè)a屬性了

2018年4月23日 20:39
編輯回答
枕邊人

背后邏輯應(yīng)該類似這樣:

let 簡版快照=JSON.parse(JSON.stringify(obj));//返回一個(gè)新對象,相當(dāng)于老對象的快照
let 詳情快照=JSON.parse(JSON.stringify(obj));//返回一個(gè)新對象,相當(dāng)于老對象的快照

如果你現(xiàn)在訪問了詳情,詳情快照就確定了,后面不變了,如果你放著,后面再訪問,詳情快照就暫時(shí)沒有值,等你加了一個(gè)屬性,這個(gè)時(shí)候,再訪問前面的,這個(gè)時(shí)候,前后兩個(gè)都會(huì)執(zhí)行

JSON.parse(JSON.stringify(obj))

那么這個(gè)時(shí)候的結(jié)果當(dāng)然是一樣的,也就是出現(xiàn)同步;
圖解:

clipboard.png

clipboard.png

clipboard.png

2018年7月16日 00:14