You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用构造函数创建的数组调用push()触发致命错误(字面量数组正常)

问题原因分析

你遇到的是无限循环导致内存溢出的问题,核心冲突点在Array(10)的特性和循环条件上:

  • Array(10)创建的是一个**长度为10,但所有元素位置都是空槽(empty)**的数组,初始length值就是10。
  • 你的循环条件是i < arr2.length,但每次调用push(5)都会让数组length加1。这就导致i从0开始每次+1,arr2.length也同步+1,i永远追不上arr2.length,循环永远停不下来,直到内存耗尽触发V8引擎的致命错误。
为什么其他方式没问题?
  • 用字面量[]创建空数组时,初始length是0,循环条件i < arr2.length一开始就不成立,循环根本不会执行,自然不会报错。要是你用字面量创建固定长度数组(比如[...Array(10)]),再用同样的循环条件+push,一样会触发无限循环。
  • 改用arr2[i] = 5赋值时,只是填充数组的空槽,不会改变数组length(始终是10),i从0到9循环10次后就正常结束。
解决方案

根据需求,有几种常用解决方式:

  1. 直接填充10个5:
const arr2 = Array(10).fill(5);
  1. 循环+push的话,固定循环次数:
const arr2 = [];
for(let i = 0; i < 10 ; i++) {
    arr2.push(5);
}
  1. 填充Array(10)的空槽:
const arr2 = Array(10);
for(let i = 0; i < arr2.length ; i++) {
    arr2[i] = 5;
}
// 或者用map,注意先填充空槽为undefined
const arr2 = Array(10).fill().map(() => 5);

内容的提问来源于stack exchange,提问作者RETOVSKEJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:05:41