打印对象的 “精心骗局”

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]

posted @ 2019-04-30 21:52  火鸡的呐喊  阅读(194)  评论(0编辑  收藏  举报