今天工作的时候使用console.log()打印数组调试代码的时候,发现了一个奇怪的现象
咦 数组展开之前,显示的是[1,2,3],展开后却显示的是[1,2,3,4]。好奇怪啊,以前怎么
没有遇到啊(原谅我的年轻。。。)这时候我注意到右上角有个蓝色的小图标,于是我把鼠
标移动上去,最后出现在我眼前的是“Value below was evaluated just now”这一行大字。
为了弄清楚原因,我查了一波资料,才发现是因为console.log()之后的代码改变了数组!
let array = [1, 2, 3]
console.log(array)
array.push(4)
结论就是:当你展开数组的时候,显示出来的数据是最终发生了改变的数据
后来我在想,如果是数据发生改变之前,我就展开了数组,那么还会发生这种“奇怪”的现象吗?
于是我执行了下面的代码:
let array = [1, 2, 3]
console.log(array)
setTimeout(() => array.push(4), 5000)
眼疾手快的我在不到一秒的时间点开了数组,等待着“奇怪”的现象发生
等了好久好久,发现一直是这个界面:
这次,我刷新等5秒之后再展开数组看结果吧:
哈哈,“奇怪”的现象又发生了
所以结论就是:当你在控制台展开打印出来的数组(或者对象)的时候,如果此时数组(或者对象)的数据已经发生了改变,那么将显示改变之后的数据。如果此时数组(或者对象)的数据没有发生改变,那么就一直显示此时的数据
(新人一枚,如有错误欢迎大家指出,谢啦)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。