用一分鐘理解console的這個原理,多留幾根黑髮~

引言

問題: console打印出的值與實際值不符的緣由。javascript

碰到這個問題是由於某一個值a更改成a1後,然而打印出來的值倒是a1,展開打印的值是a。由於不理解這個現象,致使調試代碼走了不少彎路,最後才定位到問題。java

先來看現象

緣由

代碼chrome

let a = { name: 'langlang', look: 'handsome'};
 console.log(a);
 a.name = 'shuishui';
 a.look = 'beautiful';
複製代碼

緣由: 打印出的值是運行時的值,點擊展開後是最後修改的值。ui

chrome控制檯打印對象是引用的,默認沒有展開,展開後就是最後修改的值,因此會出現展開後的值與以前不一樣。spa

以前那個bug是由於a更改成a1後,後面又隱式的將其更改成a。因此打印的時候是a1的值,但後面被隱式更改了,展開後就是隱式更改後的a的值。調試

若是想看到實時的值,能夠直接打印字符串:code

console.log(JSON.stringify(a));
複製代碼

結果:cdn

相關文章
相關標籤/搜索