一个对象,先console.log后再改变该对象的属性值,打印出的结果已发生改变?

如下:

   var obj = {
    a: [1]
   }
   console.log(obj);
   obj.a = [2];

结果:

clipboard.png

但如果a属性的值是一个基本类型:

   var obj = {
    a: 1
   }
   console.log(obj);
   obj.a = 2;

clipboard.png

为什么有这种区别呢,求解

阅读 6.6k
2 个回答

这是因为 console.log/dir/... 这类方法输出对象时会显示该对象在内存中最新的状态;内存的地址上是原始值是不能被修改,所以对象的话输出结果中 a 的值都已经被修改成最新的值

因为下边的你并没展开呀……没展开当然就只是console当时的快照咯。

而且,你要明白你用的功能是log日志呀,那是文本字符串,虽然浏览器能做到一部分动态,但那毕竟主要还是静态的对不?要看动态的还是找debug吧……

推荐问题