请问Array(5)生成的是数组还是伪数组

来源:2-8 Array.from(如何将伪数组转换成数组?)

samudaodan

2019-12-23

老师好,您在其他同学的答复中提及伪数组不能使用forEach方法遍历,那么,Array(5)生成的是不是数组呢?如果是数组的话,为什么forEach不能将它的元素改变?

代码如下:
let array = Array(5)
array.forEach((val, id, arr) => {
arr[id] = 1
})
//浏览器运行结果:[ ,,,,,]

但是,这段代码:
let array = [1, 2, 3, 4, 5]
array.forEach((val, id, arr) => {
arr[id] = 1
})
//浏览器运行结果:[1, 1, 1, 1, 1]

若同为数组,为何两个结果相去甚远?

谢谢。

写回答

2回答

supoxiao

2020-02-19

let array = Array(5) 创建的是一个稀疏数组,对于稀疏数组forEach方法不会调用传入的第一个参数(函数)

0
0

快乐动起来呀

2019-12-23

你打印下第一个array的vak,id

0
2
薇笑的夏娃
console.log(Array.isArray(array)) // true,所以Array(5)生成的不是伪数组。 单独赋值是可以成功的 array[0] = 2 forEach赋值不成功盲猜同学的回复是正确的,Array(5)只是声明了一块空间来存放一个5个元素的数组,但地址具体是什么还没有分配,每个元素只有在赋值的时候才会指定具体的key存放地址,所以forEach的时候key为空,就无法赋值。 就如下,我先赋值一个元素,那么赋值的那个元素是会变成1的,其余未赋值的元素仍然是Empty array[0] = 2 array.forEach((val, id, arr) => { console.log('before:', val, id, array) arr[id] = 1 console.log('hou:', val, id) }) console.log(array) // [1, empty * 4]
2019-12-26
共2条回复

再学JavaScript ES(6-10)全版本语法大全

前端无门槛学习,从ES6到ES10,一套课程掌握JS最新语法

1182 学习 · 336 问题

查看课程