欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js console.log打印對象時屬性缺失的解決方法

 更新時間:2019年05月23日 09:46:49   作者:碼飛_CC  
在編寫代碼時,我們常常用 console.log() 的方式將信息在控制臺中打印出來以幫助我們進(jìn)行前端調(diào)試,那么console.log打印對象時屬性缺失怎么辦?下面我們就一起來了解一下解決方法

1. 序

在編寫代碼時,我們常常用 console.log() 的方式將信息在控制臺中打印出來以幫助我們進(jìn)行前端調(diào)試。一般情況下,我們打印普通值都沒有問題,但在打印對象類型時,我們就需要注意點了,要不然可能會出現(xiàn)不符合期望的結(jié)果。

2. console.log()輸出對象屬性缺失

  • 首先,定義了一個 cat對象 ,其擁有 name, age, color, birthday 四個屬性。
  • 接著,我們又定義了一個函數(shù) test ,它接收一個對象作為參數(shù)。調(diào)用test函數(shù)時,我們想知道傳入test函數(shù)的參數(shù)是怎樣的,會先調(diào)用 console.log(obj) 將傳入的對象打印出來,最后在函數(shù)內(nèi)的某處刪除傳入對象的 name 屬性。

那么,此時將 cat 對象作為參數(shù)調(diào)用 test 函數(shù),控制臺打印出來的信息將會是什么呢?會是我們預(yù)想的傳入時參數(shù)的樣子嗎?

const cat = {
 name: '喵喵',
 age: '2',
 color: 'white',
 birthday: '1月1號'
}

function test(obj) {
 console.log(obj)
 //這里有段很長的代碼...
 delete obj.name
}

test(cat)

控制臺輸出信息:

咋一看,沒問題,輸出的結(jié)果的確是我們傳入時的樣子。但實際中,傳入的對象可能具有很多屬性,那么我們想要看完整的信息就必須將輸出結(jié)果展開。如下:

展開的信息中,我們可以看到結(jié)果少了 name 屬性,細(xì)心的小伙伴可以發(fā)現(xiàn)還多了一個感嘆號的標(biāo)志(鼠標(biāo)懸浮的文字:Value below was evaluated just now.)。咦,奇怪了,我們不是在test函數(shù)內(nèi)的第一行代碼就輸出參數(shù)的信息的嗎,怎么會少了 name 屬性? 其實感嘆號的內(nèi)容已經(jīng)說明了,我們展開的信息其實是剛剛獲取到的結(jié)果,也就是代碼執(zhí)行后的結(jié)果,test函數(shù)中有一段 delete obj.name 的代碼,執(zhí)行完后,obj對象當(dāng)然就沒有 name

屬性啦。在復(fù)雜的項目中,對象屬性會很多,代碼中的不知哪一處也可能會刪除了對象的某些屬性,這時我們打印出來的結(jié)果可能就會跟傳入時的不一樣,這種情況下我們可能就會一頭霧水了。那么如何獲取正確的結(jié)果呢?

3. 獲取正確的結(jié)果

由于展開 console.log() 的結(jié)果并不是我們代碼所處位置那個時間點的對象的拷貝,故我們想要在代碼執(zhí)行到那個位置時的那個時間點對應(yīng)的對象狀態(tài),只要在那時輸出 對象的副本 即可。

3.1 方法1:對象展開

const cat = {
 name: '喵喵',
 age: '2',
 color: 'white',
 birthday: '1月1號'
}

function test(obj) {
 console.log({...obj}) //使用ES6的對象展開符操作,獲取到obj的副本。
 //這里有段很長的代碼...
 delete obj.name
}

test(cat)

這時,我們得到的就是 console.log() 執(zhí)行時間點時obj的狀態(tài)啦。

3.2 方法2: JSON.stringfy()看字符串

const cat = {
 name: '喵喵',
 age: '2',
 color: 'white',
 birthday: '1月1號'
}

function test(obj) {
 console.log(JSON.stringify(obj)) //調(diào)用JSON.stringify()方法將對象轉(zhuǎn)化為字符串
 //這里有段很長的代碼...
 delete obj.name
}

test(cat)

同樣,此時我們也可以得到代碼運(yùn)行時間點時的obj對象狀態(tài)。

總結(jié) : 以上兩種方法都可以獲取代碼運(yùn)行時的對象狀態(tài),但是比較 推薦第一種方法,因為當(dāng)內(nèi)容非常多時,第一種方法可以展開數(shù)據(jù),有利于我們更快捷清晰地獲取目標(biāo)信息。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論