console.log-對象引用

現象

現象1

利用簡單的例子描述下

打印出的結果爲

很明顯能夠看出,對象在打印以後改變,但最終結果仍是改變後的值,所以console.log保存的事對象的引用。debug

現象2

可是,在debugger的過程當中我發現,若是在對象改變以前去控制檯展開對象看,結果就不太同樣了


發現這時候即便後面執行了a.b.c = 2,控制檯的輸出也沒有變化了調試

現象3

而若是第一次展開時不所有展開,像這樣

那第二次去看的時候,就是會有個很奇怪的現象

此時再展開,就是這樣
對象

小結

從以上現象看,好像就是不展開看就是引用,展開看了就不是了;且展開了上一層,只要下一層還沒展開,那下一層就仍是引用(現象3)。blog

緣由

以上的小結其實有誤導,研究了一下我發現緣由遠在天邊,近在眼前。展開對象後,打印結果右上角有個感嘆號,把鼠標放在上面

這句英文意思是:如下結果是剛剛被執行的。這也就很好解釋上面的現象了,也就是展開以前保存的是快照,展開對象時 ,纔會去引用裏執行取值操做。
還發現一個現象,若是在現象2中,看到結果1後收起對象,看結果2時再展開,結果不會有任何變化,也就是說只要展開過一次,第二次就不會再進行取值操做了。字符串

可選解決方案

若是想要真正看到console.log所在行對象當時的值,能夠用string

  • JSON.stringify(a),將對象轉換爲字符串
  • JSON.parse(JSON.stringify(a)) 備註:在用console.log調試時,看到的不必定是真實的,要多多注意。
相關文章
相關標籤/搜索