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

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

// 
var blanks = new Array(number);

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

发现这个结果总是为0

在浏览器直接输入,返回值如下

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等遍历方法都不起作用.()

最后只好用 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代码是合法的:

posted @ 2016-12-23 20:24  一川碎石  阅读(565)  评论(0)    收藏  举报