美文网首页我爱编程
眼见并不为实——JS中console.log的'不可靠&

眼见并不为实——JS中console.log的'不可靠&

作者: 千若逸 | 来源:发表于2018-05-18 18:47 被阅读29次

在Chrome中任意网页里打开控制台,输入以下代码回车:

var obj = {'a':'b',
'c':'b',
'd':'b',
'e':'b',
'f':'b',
'g':'b',
'h':'b',
'i':'b',
'j':'b',
'k':'b',}; 
console.log(obj); 
obj.foo = 'bar';

你会发现打印出的结果是'{a: "b", c: "b", d: "b", e: "b", f: "b", …}',这是因为obj对象里面的元素过多而省略了,于是你点击左边的三角形按钮展开结果,赫然发现结果如下:

a:"b"
c:"b"
d:"b"
e:"b"
f:"b"
foo:"bar"
g:"b"
h:"b"
i:"b"
j:"b"
k:"b"

是不是感觉很神奇,console.log打印的结果怎么会有'foo:"bar"'这个结果?明明obj.foo = 'bar'的赋值在后啊。难道是出了bug?

再看下面一段代码:

var a = {name: '1'};
console.log(a);
a.name = '2';
console.log(a);

在Chrome的控制台上执行上面的代码,会发现直观结果为:

{name: "1"}
{name: "2"}

但同时每一行左边都有三角形按钮,点这个按钮会发现展开的结果都是{name: "2"}.

这说明了打印结果中未点击三角形按钮的显示结果是真实的,而点击后所显示的对象数据是该对象的最新数据,这是因为Chrome控制台会记录对象的引用地址,点击三角形按钮实际就是查询该地址对应的对象数据。

而在第一个例子中,因为这个对象元素太多,直接输出的时候出现了省略,导致不能直接看到key为foo的值,只能点击三角形按钮展开看,这就产生了误导,以为是出了bug。

以上说的是console.log打印对象的情况,同样地,对于数组也会有这样的问题。

如何尽量避免这种问题呢?办法就是把要打印的对象在打印时记录一个快照,比如用字符串存储起来不就不用担心引用了吗?如下所示:

console.log(JSON.stringify(obj));

参考:

相关文章

  • 眼见并不为实——JS中console.log的'不可靠&

    在Chrome中任意网页里打开控制台,输入以下代码回车: 你会发现打印出的结果是'{a: "b", c: "b",...

  • 眼见不为实

    坦山和尚带一个小沙弥下山办事,经过一条小河,由于刚下过雨,河水没过了碾石,河道泥泞。坦山和小沙弥脱下鞋子,挽起裤腿...

  • 眼见不为实

    台上一分钟,台下十年功。 我有时候,有一种奢望,或者叫妄想。总想着一下子自己写的文章有多么的美好。想写成爆款,写成...

  • 眼见不为实

    也许你知道,也许你不知道,这都没有关系。我想有百分之五十的人都会忘记这个知识点,那就是我们看到的星星是它的过去还是...

  • 眼见不为实

    傍晚,我从高速开车回家,带着妻子和女儿。 远远的天空中,整个天空都灰蒙蒙的一片。但是有一小块奇特的图案,大约比风筝...

  • 眼见不为实

    今天看到两个三年级的男生,一个躺在地上,另一个正在用脚踢他。看到这样的场景,我一开始会认为那个踢人的孩子太暴力了,...

  • 眼见不为实

    最近几天,玩抖音特效上瘾。其中有个特效“一键满屏秋叶”,操作简单,适合如我等初学者。只要对着树拍视频,然后轻点手机...

  • 眼见不为实

    隶属日更记实系列第48篇。 ‘我的钱包丢了,身份证还在里面。怎么办呀?’我家小迷糊眼角噙泪的说着。 ‘咋回事,别急...

  • 眼见不为实

    这个世界上,每个人都有自己所要承受的苦,家家都有一本难念的经。有时候你只是看他表面的事情,并不了解真相,所以不要轻...

  • 眼见不为实

    今天早晨又路过那片蓝色的小花,心里喜爱就近距离多拍了几张照片,离开时打开“形色”又确认一下花名,结果出乎意...

网友评论

    本文标题:眼见并不为实——JS中console.log的'不可靠&

    本文链接:https://www.haomeiwen.com/subject/pthndftx.html