js Array问题

题目描述

区分 new Array(5) vs new Array(5).fill() vs Array.apply(null,{length:5})的区别。。

题目来源及自己的思路

有点搞不清这几个的区别,恳请指教,谢谢

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 1.6k
2 个回答

new Array(arrayLength)

此时将返回一个 length 的值等于 arrayLength 的数组对象(言外之意就是该数组此时并没有包含任何实际的元素,不能理所当然地认为它包含 arrayLength 个值为 undefined 的元素)

在 Chrome Dev Tools 的 Console 中可以看到 new Array(5) 打印结果是:[empty × 5]empty 表示没有包含任何实际的元素,使用 map 之类的数组方法迭代访问,即

new Array(5).map(item => console.log(item)); // 不会打印出任何值

Array.prototype.fill

fill() 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。

new Array(5).fill() 即使用 undefined 填充数组中全部元素,即 [undefined, undefined, undefined, undefined, undefined]

Function.prototype.apply类数组对象

apply() 方法调用一个具有给定this值的函数,以及作为一个数组(或类似数组对象)提供的参数。

Array.apply(null,{length:5}) 即给 Array 传入参数:5个 undefined,结果为 [undefined, undefined, undefined, undefined, undefined]

new Array(5)  // []
new Array(5).fill(0) // [0,0,0,0,0]
Array.apply(null,{length:5}) // [undefined,undefined,undefined,undefined]

第一个是普通的Array 构造函数实例化一个长度为5的数组,返回的是length属性为5的空数组

clipboard.png

第二个是在第一个实例化后,为五个元素赋值,
clipboard.png

第三个是apply借用Array的方法,this指向js的根对象null,实例化一个length为5, 值为undefined的空数组,Array.apply(null, {length:5,0:1,1:2}) 这么用的话,得到: [1,2,undefined,undefined,undefined]

楼主可以参考下这篇文章:https://segmentfault.com/a/11...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏