1. 程式人生 > >打印對象的 “精心騙局”

打印對象的 “精心騙局”

class var 這就是 屬性 ons bject obj string json

var  obj = { 
       name : ‘zs‘,
       age : 18  
}

console.log(obj); // {  name : ‘zs‘ ,age : 18}

這有什麽?平常的聲明和打印,很正常啊?是的非常正常,以至於看不出其中的貓膩。再來看下面的例子

var  obj = { 
       name : ‘zs‘,
       age : 18  
}

obj.name = ‘ls‘;
console.log(obj); // {  name : ‘ls‘ ,age : 18}

這也沒什麽啊?改變name值然後打印,很是很正常,但是睜大你的眼睛:

var  obj = { 
       name : ‘zs‘,
       age : 18  
}

console.log(obj); // {  name : ‘zs‘ ,age : 18},但是展開後就變成 { name : ‘ls‘,age : 18 }
obj.name = ‘ls‘;

提前打印,但是後續改變屬性值,打印{ name : ‘zs‘ ,age : 18},但是展開後就變成 { name : ‘ls‘,age : 18 },有人說這還有展開?是的每一個對象左邊都有一個頂點朝右的灰色等邊三角形,點擊頂點朝下。

這是由於打印對象後續操作有改變的情形。有人就說這有什麽關系?反正不展開之前打印的表面數據已經可以檢測效果了雖然展開是改變對象後的內容但是不展開還是想要看到的數據,這不就可以了嗎?沒錯,想法是對的,但是:如果是一個對象中的屬性值也是一個對象,控制臺打印的時候就會把二層對象給打印出{...},想要查看必須點擊小三角展開這時候必然是改變過後的值了,還能達到預期效果嗎?

那麽又有什麽辦法呢我就想要瞬時的哪一個階段打印的對象呢?打印的時候用JSON.stringify包一下變成字符串JSON.stringify(obj),把對象改為字符串,又有人問了直接+" "不就行了,這就是js的神奇之處,直接對象+" "輸出的就是[object Object]

打印對象的 “精心騙局”