我注意到如果我这样做:
Array(n).map(() => console.log('test'))
我什么也没打印出来。
但是如果我这样做:
Array(n).fill().map(() => console.log('test'))
I get test
打印出来n
times.
为什么会这样呢?如果我做Array(n).length
我回来了n
.
我在 REPL 中注意到Array(5)
返回:
[ , , , , ]
Whereas Array(5).fill()
返回:
[ undefined, undefined, undefined, undefined, undefined ]
在这两种情况下,typeof
数组中的任意元素=== undefined
.
发生什么了?
map
仅对数组的已定义整数属性进行操作。Array(n)
不设置整数属性,而Array(n).fill()
做。有一个区别不存在的属性 and 一个现有的财产,其价值是undefined
.
Array(n)
设置length
数组的属性,但它不设置任何属性。数组对象没有任何整数属性。
.fill
设置数组的所有整数属性,从零到小于 1length
。当你这样做时Array(n)
你设置了length
新数组的属性,然后.fill()
定义并设置每个整数属性最多n-1
。创建的数组Array(n).fill()
does具有最多定义的属性length - 1
。 (属性恰好设置为undefined
,因为你没有将参数传递给fill
,但它们确实存在。)
实际上,如果您这样做,您就会看到差异Object.keys(Array(4))
(空数组)与Object.keys(Array(4).fill())
(字符串列表"0"
to "3"
)。在第一种情况下,属性不存在;在第二种情况下他们会这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)