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

为什么对数组自身调用Array.prototype.push()会产生无限嵌套数组

无限嵌套数组&栈溢出原因说明

你运行的代码逻辑如下:

const animals = ['pigs', 'goats', 'sheep'];

animals.push(animals)
console.log(animals);

具体原因可以拆解为几点:

  • 数组属于JavaScript中的引用类型,变量animals中存储的不是数组的实际内容,而是数组在堆内存中的存储地址。
  • 执行animals.push(animals)时,是将animals对应的内存地址作为新元素追加到数组末尾,而非追加当前数组的拷贝值。
  • 这就形成了循环引用结构:你可以无限层级访问该数组的最后一个元素,animals[3]、animals[3][3]、animals[3][3][3]……拿到的都是同一个数组本身,不存在访问终点,也就是你说的无限嵌套数组。
  • 你碰到的Error: Maximum call stack size exceeded.报错大多是console.log触发的:多数运行环境的控制台打印数组时,会递归遍历数组的每一层元素做格式化展示,碰到这种无限嵌套的循环引用结构时,递归没有终止条件,调用栈持续累积最终超出上限,就抛出了栈溢出错误。

补充说明:如果不调用console.log打印这个数组,仅执行push操作本身是不会抛出错误的,只是数组会存在循环引用的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:24:02