关于浏览器console.log打印对象的问题

在改bug的过程中碰到一个奇怪的现象:

预期效果应该是点击事件时先修改对象params中的某一个字段,再用这个params作为参数调接口。

但浏览器上接口显示的参数却是修改之前的上一次的数据。

看到这里很容易就能想到是异步的问题,但此时迷惑性的事情发生了:我在调用接口前把params用console.log打出来,却发现里面的字段已经是修改之后的新数据,再去看network中接口的参数,依然是老数据!console.log不是同步的吗?而且如果我打印params.xxx,只把有问题的那个字段打出来,就会变成老数据,但只要打印一整个对象就是新数据。

这个问题困扰了我很长时间,最终通过别人分享的文章了解到:当console.log打印基础数据类型(string、number等)时,确实是同步的,但chrome打印object对象时却会有一个懒加载,先打印出一个Object,再去二次加载其中的内容,所以当打印对象时,里面的数据其实是异步加载的。

如果一定要打印一整个对象并且取到实时的数据,可以这样:console.log(JSON.stringify(object))。将对象转成字符串,也就不存在懒加载的问题了。

posted @ 2021-12-21 15:47  小萌新新嘤嘤嘤  阅读(678)  评论(0编辑  收藏  举报