網(wǎng)站首頁 編程語言 正文
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
相關(guān)推薦
- 2022-01-31 為什么要使用3×3卷積?& 1*1卷積的作用是什么?& 對ResNet結(jié)構(gòu)的一些理解
- 2024-04-03 @ExceptionHandler沒有報錯詳細信息
- 2024-03-13 Linux 安裝RabbitMQ
- 2022-09-15 Android自定義ViewGroup實現(xiàn)選擇面板_Android
- 2024-01-10 在多Module項目中,給IDEA底部選項卡區(qū)域添加Services選項卡
- 2022-11-22 sqlserver給表添加新字段、給表和字段添加備注、更新備注及查詢備注(sql語句)_MsSql
- 2022-04-14 解決:Failed to run File Watcher ‘goimports‘.The watc
- 2023-03-13 GO語言操作Elasticsearch示例分享_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支