1.稀疏数组
1.1创建一个指定长度的稀疏数组
-
new创建
var a = new Array();
>>(3)[empty X3]a.length >>3 a[0] >>undefined
赋值创建
var a = [];
a[0] = 0;
a[100] = 100;
>>(101) [0,emptyx99,100]1.2
1.2稀疏数组遍历,跳过empty
实际上,JavaScript并没有常规的数组,所有的数组其实就是个对象,只不过会自动管理一些"数字"属性和length属性罢了.说的更直接一点,JavaScript中的数组根本没有索引,因为索引应该是数字,而JavaScript中数组的索引其实是字符串.arr[1]其实就是arr["1"],给arr["1000"] = 1,arr.length也会自动变为1001.这些表现的根本原因就是,JavaScript中的对象就是字符串到任意值的键值对.注意键只能是字符串
a = new Array(10);
a.forEach(val=>{
console.log(val)
})
>>undefined
2.密集数组
2.1一般
var a = Array.prototype.apply(null,Array(3));
a
>>[undefined,undefined,undefined]
等价于Array(undefined,undefined,undefined)
2.2高级技巧
Array.apply(null, Array(3)).map(Function.prototype.call.bind(Number))//晦涩难懂,建议封装
>>[0,1,2]
//等同于
Array.apply(null, Array(3)).map(Function.prototype.call,Number)//
2.3生成指定长度的数组
建议将上述封装
var _range = function(num){
return Array.apply(null,Array(num)).map(Function.prototype.call,Number)
}
_range(3)
>>[0,1,2]
与map搭配使用,双剑合璧
_range(3).map(function () { return "a" })
>> ["a","a","a"]
自定义的函数虽然清晰,但是不如原生方法快
var a = ["aaa ", " bbb", " ccc "]
a.map(function(x) { return x.trim(); }); // ['aaa', 'bbb', 'ccc']
a.map(Function.prototype.call, String.prototype.trim); // ['aaa', 'bbb', 'ccc']
3.总结
数组的索引是字符串