console.log的输出结果可信吗?

在日常工作调试中我们经常用到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)的方式来调试

猜你喜欢

转载自blog.csdn.net/zhangwenok/article/details/125953875