for循环向数组push值时console.log输出异常问题咨询
问题原因解析
你遇到的这个情况不是代码逻辑错误,而是浏览器控制台的特性导致的:
JavaScript里数组属于引用类型,当你用console.log(arr)打印它时,控制台并不会立即记录下打印那一刻数组的具体内容,而是保存了这个数组的引用。只有当你后续打开控制台查看这些日志时,它才会去读取这个引用对应的当前数组状态——而此时循环已经执行完毕,数组已经被填满了[0,1,2,3,4],所以你看到的每一条日志里的数组都是最终状态。
验证与解决方法
如果想要看到每一步数组的真实状态,可以打印数组的快照,比如:
- 转成字符串打印:
let arr = []; for(let i=0; i < 5; i++){ arr.push(i); console.log(arr.toString(), i) }
输出会是:
0 0 0,1 1 0,1,2 2 0,1,2,3 3 0,1,2,3,4 4
- 创建数组副本打印:
let arr = []; for(let i=0; i < 5; i++){ arr.push(i); console.log([...arr], i) // 用扩展运算符创建新数组副本 }
这样就能得到你预期的逐步增长的数组输出。
内容的提问来源于stack exchange,提问作者cory0s
相关产品推荐
相关产品推荐

