javascript - 当我创建空项目数组时,我无法使用地图

Ale*_*502 5 javascript

我试过这个


> Array(3)
[ <3 empty items> ]
> // and this joins up all the nothings
> Array(3).join('-')
'--'
> // but...
> Array(3).map((x) => 'a')
[ <3 empty items> ]
> // map doesn't work with the array of empty items!
Run Code Online (Sandbox Code Playgroud)

我以为我会得到与此相同的结果

> [undefined, undefined, undefined].map((x) => 'a')
[ 'a', 'a', 'a' ]
Run Code Online (Sandbox Code Playgroud)

那是怎么回事?

Bel*_*mir 3

在第一种情况下,您创建一个带有未定义指针的数组。

Array(3)
Run Code Online (Sandbox Code Playgroud)

第二个创建一个数组,其中包含指向 3 个未定义对象的指针,在这种情况下,它们本身的指针不是未定义的,只有它们指向的对象。

[undefined, undefined, undefined]
Run Code Online (Sandbox Code Playgroud)

当我们比较这两种情况时,它看起来像这样

//first case look like this 
[undefined, undefined, undefined]
//the second look like this 
 Array(3) [,,,];
Run Code Online (Sandbox Code Playgroud)

map 按顺序为数组中的每个元素调用一次提供的回调函数,并根据结果构造一个新数组。仅对已分配值的数组索引调用回调;对于已被删除或从未被赋值的索引,不会调用它。在第一种情况下,数组值没有显式分配值,而在秒示例中,即使它是值未定义链接,也已分配值

对于你的例子,你必须这样做

Array(3).fill(undefined).map(x => 'a')
Run Code Online (Sandbox Code Playgroud)