【JS】記console.log()的一次踩坑

歡迎關(guān)注微信公眾號:全棧工廠
1.問題概述

今天在調(diào)試一個前端頁面的時候,使用了console.log()打印變量信息,出現(xiàn)了一個詭異的情況,大致描述為允許下面一段代碼:

var obj = {'liqing':'Hero'}
console.log(obj)
obj.test="i'm test

最后控制臺竟然打印出了下面的信息:


控制臺信息

按照道理說,在打印obj之前是不存在test屬性的,可是它偏偏就在那里靜靜的躺著!

2.填坑

最后查閱資料才知道,原來瀏覽器在打印對象的時候只是打印的一個對象快照信息,當你在控制臺點擊展開對象的時候,瀏覽器才會去讀這個對象具體屬性,但是那個時候,這段代碼早就已經(jīng)運行完了,‘test’屬性也早就存在于obj對象中了。為了驗證這個事實,我們使用下面代碼:

var obj = {'liqing':'hero'}
console.log(obj);
obj.test="i'm test"
obj.__defineGetter__('liqing', function(){ console.log('You are trying to get property `liqing`');return 'hero'; })

當我們運行這段代碼的時候就醬紫的:


圖2-1

但是,當我們展開控制臺打印的對象后我們看到:


圖2-2

說明,瀏覽器是在我們點開對象屬性的時候才去讀取存儲在內(nèi)存中的屬性值!
3.結(jié)論

以后用console.log()打印對象信息可得留點兒心眼了?。?!

注:文中如有任何錯誤,請各位批評指正!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容