new Array(n) 的坑 密集数组和稀疏数组

今天写Vue时遇到一个奇怪问题,需要监控网页上的input 是否都有值

// 
var blanks = new Array(number);

// blanks的监控属性
var emptyNumber = blanks.filter((ele)=>!ele).length // 0   blanks为空的个数 长度为0时所有的input都有值

发现这个结果总是为0

在浏览器直接输入,返回值如下
503094-20161223201507276-660265226.png

var arr = new Array(2)  // [undefined × 2]
arr[0] // undefined
arr[0] === undefined // true

于是直接用

var blanks = [undefined,undefined];

var emptyNumber = blanks.filter((ele)=>!ele).length // 2
什么情况,new Array(2) 返回值难道不是 [undefined,undefined]

接着看了一下详情,new Array(2), 只有一个length属性,并不存在 arr[0]、arr[1]的值
所以filter等遍历方法都不起作用.()
503094-20161223201708682-672307768.png

最后只好用 for 进行了一遍赋值

for(let i=0;i<arr.length;i++){
    arr[i] = '';
}

或者直接

 arr = Array.apply(null,arr)

密集数组

在java和C语言中,数组是一片连续的存储空间,有着固定的长度。假如数组起始位置是address,长度为n,那么占用的存储空间是address[0],address[1],address[2].......address[n-1]。即数组元素之间是紧密相连的,不存在空隙。

稀疏数组

javascript并不强制要求数组元素是紧密相连的,即允许间隙的存在。如下的js代码是合法的:
503094-20161223202129120-1832989664.png

转载于:https://www.cnblogs.com/asuishi/p/6216040.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值