问题
乍看之下,创建全0数组应该是一件不能再简单的事情了:
var arr = [0,0,0,0,0,0];
然而有时候需要创建出长度比较长的全0数组(比如做桶排序时就需要),这种字面声明可能就不太适合,因为不可能手打出几万个0。所以今天创建全0数组的时候,我用了以下方法:
var arr = new Array(10);
//这里等同于
//var arr = [];arr.length = 10;
arr = arr.map(function(value,index,array){
return value = 0;
});
然后对于arr里的元素都进行了++处理:
arr[i]++;
最后console.log(arr)的时候却发现,结果是:
[NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]
当时还以为自己map函数写错了,于是想了一个方法来验证:
var arr = [1,2,3,4,5,6,7,8,9,10];
arr = arr.map(function(value,index,array){
return value = 0;
});
console.log(arr);
结果得到了[0,0,0,0,0,0,0,0,0,0];
也就是说,使用new方法声明的数组,没法用map方法初始化每一个值
解决
当你用new关键字加上某个长度来创建数组的时候&