稀疏数组就是包含从0开始的不连续索引的数组。
以下a和c都为稀疏数组,虽然数组存在长度,但数组单元并不存在。
var a = new Array(3);
a; //[undefined × 3]
var b = [undefined, undefined, undefined];
b; //[undefined, undefined, undefined]
var c = [];
c.length = 3;
c; //[undefined × 3]
从ES5规范开始允许在列表(数组值,属性列表等)末尾多加一个逗号(但实际处理中会忽略不计)
[,,,,].length; //4
稀疏数组的行为差异, ES5提供的forEach,map,filter等方法并不会遍历不存在的单元,而join方法由于内部实现的是for循环,因此并不存在这个问题:
[,,,].join("-"); //"--"
[undefined,undefined,undefined,].join("-"); //"--"
[,,,].map(function(v, i){ consoel.log(i); }); //[undefined × 3]
[undefined,undefined,undefined,].map(function(v, i){ console.log(i); }); //0 1 2 [undefined, undefined, undefined]
利用具有length属性的类数组对象,创建非空单元的数组
var a = Array.apply(null, {length:3});
a; //[undefined, undefined, undefined]