奇怪的console.log

2021-03-23  本文已影响0人  Bouc

今天调试的时候遇到一个困惑的问题,

let a = [{age:18}]
console.log(a)
a[0].age = 20

将这段代码复制到chrome控制台运行时,输出结果是 [{age:20}],但是按照执行顺序,结果应该是 [{age:18}]才对。

chrome控制台结果

在node环境下跑了下,结果却是正常的!看来问题出在chrome控制台。

node环境结果

原因分析

  1. js里对象是引用类型,会公用内存。

  2. chrome的console.log不会把复杂对象立即输出,点击展开时才会去内存中读取对象的属性值,此时内存中对象的属性已经被修改了,所以看到的是修改后的值

结论

通过console.log输出基本类型时是可信的,但对于引用类型是不一定的,通过JSON.stringify可以解决。

node环境里,console.log()是同步的,不会有这种问题出现。

上一篇下一篇

猜你喜欢

热点阅读