在日常工作调试中我们经常用到console.log()打印信息,console.log()的输出结果可信吗?下面我们看两个示例。
let a = 1
console.log(a)
a = 2
let obj = {name: '张三'}
console.log(obj)
obj.name = '李四'
结论:
从上面的案例可以看出:console.log()打印出来的内容并不是一定百分百可信的内容。
JS里面分为基本类型和引用类型;
一般对于基本类型number、string、boolean、null、undefined的输出是可信的。
但对于Object等引用类型来说,则就会出现上述异常打印输出。
- 不展开对象看时,console.log()是按照代码执行顺序,同步地输出了对象当时的快照。所以我们看到的是预期的值。
- 展开对象时,它其实是重新去内存中读取对象的属性值,此时对象属性已被更改,所以展开对象后,可能看到的不是预期值了。
解决方法:
- 不要直接输出对象,先将对象深拷贝或者序列化
JSON.stringify()
为字符串再输出。 - 使用打断点(debugger)的方式来调试