在js中先申明一个空数组,先打印,再push一个值,为什么打印时会有值

蓝天
  • 4
新手上路,请多包涵

let a=[]
console.log(a)
a.push(1)

控制台显示是空数组,
clipboard.png

实际展开会有值,为什么会这样?
clipboard.png

回复
阅读 3k
4 个回答

因为Array在js里面是 引用类型,虽然你console.log在前push在后,但是因为引用类型传址不是传值,所以你在控制台看到的数组会随着数组的后继操作而更新

因为你点击展开的时候,它是实时读取数据,所以你能看的到之后push的值。换个说法,就是console.log的时候只是那个时间的一个快照,所以出来是一个空数组,但是它还保持着与内存之间的联系。你点击展开的时候,浏览器实时从内存中读取到了它里面的值。不知道这样说,你能否理解?

这个例子充分体现了console.log是异步的, 所以尽量不要用console去调试你的app.

上面那个空的只是一个快照,点开的时候才是真实的数据。

如果你把a改成基本类型就绝对不会有这个问题了。

根本原因就是 因为是 引用类型哇

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