Array(20)与Array.apply(null, {length: 20})的区别

起因:看vue官方文档的时候,发现有段代码是Array.apply(null,{length:20}).map(() => {})这样的

解释:这段代码按照表面理解肯定是循环一个20长度的数组,返回一个新的20位数组

思考:1.为什么写Array.appply(null, {length:20})而不是写Array(20)?

2.xxx.apply(a,b) 这个b不应该是个数组么?为什么一个对象也可以?

解答:1.var arr = Array(20)是创建一个长度为20的数组,但是数组每个位置上都没有值,返回的是[empty × 20],仅仅只是占位作用,如果用arr[0]=undefined... arr[19]=undefined 就和Array.apply(null, {length:20})完全一样了。

所以如果用Array(20).map()是不会执行的;Array.apply(null, {length:20})是也是创建一个长度20的数组,返回的是[undefined,undefined,undefined,undefined...]这是的的确确有值的,只不过值为undefined,故使用Array.apply(null, {length:20})是可以完成遍历的。

2.{length:20}简单看似是个对象,但实际想想这是个类数组,0->19位都是undefined,length = 20,类数组是可以作为apply的第二个参数的,如:

function a () {

Array.prototype.push.apply(arguments)

};这里的arguments就是类数组

这样疑惑就都解开了。

实际测试中发现Array.apply(null,{name: 'a'})会返回一个[],这应该是js内部做了什么操作,我暂时还不太清楚,有清楚的大佬可以留言解答一下,多谢。总之没有length的普通对象就会返回[]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值