You need to enable JavaScript to run this app. 修改数组子元素时全部元素都被改动?这是JavaScript的bug吗?
优惠活动
大模型
产品
解决方案
定价
更多

修改数组子元素时全部元素都被改动?这是JavaScript的bug吗?

问题结论

这不是JavaScript的语法bug,属于Array.prototype.fill()方法的正常设计行为。

问题根因

你在代码中调用Array(4).fill(new Array("", ""))时,new Array("", "")仅会执行1次,全局仅生成1个数组实例,fill方法会将同一个数组对象的引用重复填充到外层数组的4个下标位置中。
也就是说外层数组的4个元素本质上指向内存中的同一个数组对象,你对TwoDimArray[0][0]赋值,本质是修改这个公共数组实例的属性,自然所有引用该实例的位置都会同步显示修改结果。

正确实现方式

如果要生成4个互相独立的子数组,可使用Array.from或fill+map的写法,保证每次迭代都生成新的子数组实例:

// 写法1:Array.from 映射函数每次执行生成独立子数组
const TwoDimArray = Array.from({length: 4}, () => new Array("", ""))

// 写法2:先fill占位再通过map生成独立子数组
const TwoDimArray = Array(4).fill().map(() => new Array("", ""))

修改完成后再对TwoDimArray[0][0]赋值,就只会修改第一个子数组的第一个元素,不会影响其他子数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 05:45:04