引用数据类型问题,为什么后面改变e的值后第一次打印属性e的值也改变了?请看代码

var arr1 = [1, 2, { e: 1 }]
var arr2 = [4, 5, 6]
var arr3 = [...arr1, ...arr2]
console.log(arr3);// [1, 2, {e:8}, 4, 5, 6] //为什么这里e的值为8而不是1
//for (var i = 1; i < 100000; i++) {
 //   console.log(i);这里是为了让下个log延迟打印
 // }
arr3[2].e = 8
console.log(arr3);// [1, 2, {e:8}, 4, 5, 6]

刚才第一次提交,人工审核,发现错误,不让编辑,现重新描述
根据js的执行顺序,第一次log时我还没有改变arr3[2].e的值,我是先打印后改变值的,为什么第一次打印出来e的值也为8?

阅读 2k
3 个回答

这是对基本类型和引用类型的理解不透彻,你在浏览器上点开那个引用类型的时候,他会根据stack里存的地址去heap里找东西,所以你看到的东西都是最新的,你把前面打印的东西JSON.stringify一下,再打印看看
可以参看下这篇:https://segmentfault.com/a/11...

新手上路,请多包涵

应该是chrome的console问题,展开的时候是获取的当前状态

新手上路,请多包涵

console只打印最终结果,最终值。js和php/java这种语言的调试方式有区别。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏