Skip to content

Array.prototype.fill() 填充对象类型问题

我们使用 Array.prototype.fill() 创建一个 一维 长度为5,二维长度也为 5,填充值为 0 的数组。

javascript
list = Array(5).fill(Array(5).fill(0))

结果如下入所示:

alt text

这么看输出结果好像没有什么问题,此时我们修改一维下标为0,二维下标也为0的数组值为 1

alt text

此时问题就出来了,原来fill填充的是对象引用,这算不算是一个 BUG。此时查看 MDN 的 Array.prototype.fill()文档 发现MDN中给的二维数组的填充是如下方式,看来这个问题是真实存在的,fill只能填充基本数据类型。

alt text

JavaScript 提供了两种基本数据类型:基本类型和对象类型。

基本类型:number、boolean、string、symbol、null、undefined

对象类型:对象、普通对象、数组、函数等等

解决方案,其实就是 换一种思路创建二维数组本质和 MDN 文档中的方案没有本质区别

javascript
Array.from(Array(5).fill(0), () => Array(5).fill(0))

Array(5).fill([]).map(()=>{ return Array(5).fill(0)})