打印对象的 “精心骗局”

Posted wchjdnh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打印对象的 “精心骗局”相关的知识,希望对你有一定的参考价值。

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]

以上是关于打印对象的 “精心骗局”的主要内容,如果未能解决你的问题,请参考以下文章

python python中的漂亮(或漂亮打印)JSON对象具有这一功能。在尝试了解什么时,我总是使用这个片段

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程