Array.apply(null, { length: 20 })的用法

今天再看VUE的渲染函数,看到apply一个很特殊的用法:
apply(null, { length: 20 })

render: function (createElement) {
  return createElement('div',
    Array.apply(null, { length: 20 }).map(function () {
      return createElement('p', 'hi')
    })
  )
}

有两个疑问:1.apply的第二个参数不是必须是数组么? 2.为什么用apply,直接 Array(20) 也能创建一个长度为20的数组啊?
于是特意查了一下MDN:Function.prototype.apply()

Array.apply(null, { length: 20 })的用法_第1张图片


解答1:apply的第二个参数可以穿进去一个带length属性的对象也可以,因为检测的是length属性。

解答2:Array(20)创建出的数组虽然长度是20,但是创建出来的数组都没有初始化,你console看一下。而Array.apply(null,{length:20}) 创建出来的数组不仅长度是20,并且每一项都是undefined,已经初始化过了。
Array.apply(null, { length: 20 })的用法_第2张图片
再看看Array(20):
在这里插入图片描述
总结一下:

Array(20):创建一个 length 为 20 的数组,可以在console.log()中看到显示的是[empty * 20],是空的。但是JavaScript会自动为数组的每一项赋值 undefined ,而这个 undefined 和 我们自己手动赋值的undefined 有点不一样。可以理解为JavaScript自动赋上的 undefined 相当于为数组的每个值霸个位置,日后方便我们的使用。
Array.apply(null, {length: 20}):已这种方式创建出来的数组呢,数组中的每一项一创建出来就被我们赋上了确确实实的值 undefined ,而不仅仅是霸个位置那简单。所以大家以后想创建一个数组每一项一开始就是 undefined 的数组的话,那用这种方法挺不错的。

你可能感兴趣的:(Vue)