Array(n)和Array(n)之间的区别.fill?

NRa*_*Raf 16 javascript arrays

我注意到如果我这样做:

Array(n).map(() => console.log('test'))
Run Code Online (Sandbox Code Playgroud)

我没有打印任何东西.

但是,如果我这样做:

Array(n).fill().map(() => console.log('test'))
Run Code Online (Sandbox Code Playgroud)

test打印出来的n时间.

为什么会这样?如果我这样做,Array(n).length我会回来n.

我注意到在REPL中Array(5)返回:

[ , , , , ]

Array(5).fill()回报:

[ undefined, undefined, undefined, undefined, undefined ]

在这两种情况下,typeof数组中的任何元素=== undefined.

发生什么了?

aps*_*ers 22

map仅对数组的已定义整数属性进行操作.Array(n)不会设置整数属性Array(n).fill().有之间的差异不存在的属性一个现存的属性,其值是undefined.

Array(n)设置length数组的属性,但不设置任何属性.数组对象没有任何整数属性.

.fill将数组的所有整数属性设置为从0到小于1 length.在Array(n)设置length新aray 的属性时,然后.fill()定义并设置每个整数属性n-1.创建的数组Array(n).fill() 确实具有最多定义的属性length - 1.(属性恰好设置为undefined,因为您没有传递参数fill,但它们确实存在.)

在pracitcal方面,你可以看到,如果你做的差Object.keys(Array(4))与(空数组)Object.keys(Array(4).fill())(字符串列表"0""3").在第一种情况下,属性不存在; 在第二种情况下他们这样做.


小智 6

Array(n) 创建一个大小为n的新数组,但内容尚未定义。

Array(n).fill() 创建一个大小为n的数组,其中每个元素都设置为您传递给fill的值,或者因为您未传递任何内容而未定义的情况。

Array(n).fill('test') 创建一个大小为n的数组,并填充“测试”。