本日看到一段代码:
Array.apply(null, Array(30)).map(() => 4)
这代码的写法没法让人一下明白它的企图。
Google 以后晓得它的作用是组织一个长度为 30 的数组,默许值是 4。
剖析
然则为何要写得这么别扭呢?我们来分解下它每一步在做什么:
Array.apply(null, Array(30))
这一段代码天生一个长度为30的数组,内里的值都是 undefined。
以后的 .map(() => 4)
:担任添补默许值
然则为何组织一个空值数组须要这么贫苦呢?还要用上 apply 要领,尝试用 Array(30).map(() => 4)
来天生数组的话,你会获得如许的一个效果,根本就没有值。
[ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ]
检察文档 能够看到 Array 的组织函数语法,能够得知 Array 支撑两种组织体式格局。运用参数情势给定 N 个数组元素,或许给定一个数组长度。
不过比较主要的一点文档里没提到,运用 new Array(arrayLength)
体式格局组织的数组是一个希罕数组,内里是没有任何值的,只要长度。所以这个体式格局组织出来的数组是没法遍历的,也就没法用 map 遍历添补值了。
晓得了上述的缘由,我们就可以明白:
Array.apply(null, Array(30))
实在即是Array.apply(null, [, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,]))
然后我们要继续相识 apply 要领,在这里能够看 apply 的作用 文档诠释, 这里不作引见。apply 要领会把天生的希罕数组睁开并当作参数再次传给 Array 的组织函数,就是如许子:
Array(null,null,null......))
如许终究就会获得一个数组,如许就不是希罕数组了,内里是有值的,虽然是 undefined。
[ undefined, undefined, undefined ……]
结语
总结下,实在就是 js 的 Array 的默许组织函数天生的是希罕数组,是没法用 map 遍历添补的。所以才写得这么绕。
不过,说了这么多,要完成底本的需求,实在有更简朴的要领啦:
Array(30).fill(4)
fill 要领的申明