问题记录:console.log在对象修改前打印出对象修改后的值

1,193 阅读1分钟

今天在用console.log 打印一个对象修改前后的值时发现了个问题

   let obj = {
       a:'abc'
   }
   console.log(obj)  // 快照1
   obj.a = {}
   console.log(obj)	 // 快照2
  1. 当我第一次打开浏览器控制台
  2. 当我刷新网页再看控制台!以为看到了我想要的结果,但是展开后还是修改后的值

解释

  • 估计也是为了性能,第一次进来为了“快”,不会立刻去查出所有要打印的对象的成员来展示,快照1页只显示了些简要信息(比如类型),而是当你点击左侧三角形展开某一个对象时(毕竟很多对象你可能并不会去展开),才会根据引用去查找这个对象的成员,而这个时候看到的就都是这个对象最新的值了。
  • 第二次也只是对快照1进行了补充
    • 字符串,直接输出
    • 数组 {a: Array(0)}
    • 对象 {a: {…}}