console打印对象时奇怪的现象

在console执行这一段代码

1
2
3
4
5
6
7
8
var obj = {
a: 1,
b: 2,
c: 3
}
console.log(obj)
obj.a = 11
console.log(obj)

如下图:

但是当我们展开第一个输出的对象时,会返现一个奇怪的现象,里面的a从1变成了11

原因:
在执行console.log的时候,chrome会对变量obj求一次值,输出到控制台。当点击展开时,又会继续对这个变量求一次值,显示它的属性,但是这个因为这个时候对象引用的值已经改变了,所以会显示新的值。

如果需要详细的看出前后的变化,可以使用 JSON.stringify(obj) 来打印obj。



再额外介绍一个小功能:
当我们需要复制控制台输出的对象时,可以右键对象,点击出现的 Store as global variable,控制台会自动出现一个temp1的全局变量,执行 copy(temp1) 就可以复制到剪切板了。