日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

console.log打印object值不對

作者:番茄不愛 更新時間: 2022-01-05 編程語言

debug時遇到一個問題:
console.log(object); 和 console.log(JSON.stringfy(object));打印出的值不一致,導(dǎo)致debug的時候以為是console.log這個動作之前獲取到的object數(shù)據(jù)就不對,浪費了些時間在debug獲取數(shù)據(jù)部分,而實際上問題出在console.log動作之后。因為:
console.log打印對象的執(zhí)行機制是,當(dāng)你在瀏覽器控制臺點擊object,展開object時,此時瀏覽器才會去object所在的堆內(nèi)存中獲取數(shù)據(jù),再經(jīng)過瀏覽器編譯,展示在控制臺。
控制臺object一旦打開后,就不再修改,其值就會存儲在瀏覽器中,即使后面代碼再次更新object,也不會改變了。

做個測試:

//定義object: this.orginData
this.orginData = {
	 a: '111',
	 b: '222',
};
console.log("object orginData==", this.orginData);
console.log("object orginData a==", this.orginData.a);
console.log("json orginData==", JSON.stringify(this.orginData));
console.log("json orginData a==", JSON.stringify(this.orginData.a));

//修改object中a的值,設(shè)為空
this.orginData.a = "";
console.log("object orginData==", this.orginData);
console.log("object orginData a==", this.orginData.a);
console.log("json orginData==", JSON.stringify(this.orginData));
console.log("json orginData a==", JSON.stringify(this.orginData.a));


編譯后在瀏覽器控制臺打印的信息如下,可以看到,用JSON.stringfy()打印出的數(shù)據(jù)可以直接顯示出數(shù)據(jù),而object則顯示成折疊狀態(tài):
在這里插入圖片描述
此時,把兩個折疊的object數(shù)據(jù)打開,如下圖所示,可以看到,不論是修改object值前還是后,打印出來的兩個object的數(shù)據(jù)是一樣的,a值都為空:
在這里插入圖片描述
分析如下:
我們認為object修改之前和之后打印的結(jié)果應(yīng)該和用JSON.stringfy()打印結(jié)果一樣有所不同,但根據(jù)測試結(jié)果,前后打印的object結(jié)果卻相同。說明在瀏覽器打印對象時,并沒有直接調(diào)用對象所對應(yīng)的堆內(nèi)存中的值,而是先打印了一個由瀏覽器自己解析的代表這個對象的字符串。當(dāng)我們在控制臺點擊展開這個對象時,瀏覽器才會去根據(jù)這個對象的引用地址去堆內(nèi)存中獲取對象的具體數(shù)據(jù)展示出來。所以獲取到的object值已經(jīng)是頁面跑完后,最后的值。

如果要在瀏覽器控制臺打印代碼執(zhí)行時堆內(nèi)存所存儲的該對象的具體數(shù)據(jù),可以用JSON.stringfy(object),將object對象轉(zhuǎn)變成json字符串,也可以用JSON.parse(JSON.stringfy(object))來打印,JSON.parse()可以將數(shù)據(jù)再轉(zhuǎn)換為 JavaScript 對象,當(dāng)object對象的數(shù)據(jù)量很大的時候,用后者在瀏覽器控制臺的輸出會更加美觀,而不是一堆很長的字符串。

原文鏈接:https://blog.csdn.net/weixin_43894460/article/details/122099275

欄目分類
最近更新