首先看一段JS代码:
console.log(Array(10).map(function(){return "A"}));
有人会任务这行代码将输出10个A. 实际上它输出的是一个空数组,也就是说下面代码是成立的
Array(10).map(function(){return "A"}).join("") === ""
看上去map没有生效,针对这个原因找了一下Array.prototype.map在ECMA 262-5规范中的定义
"Array.prototype.map ( callbackfn [ , thisArg ] )callbackfn应该是个函数,它接受三个参数。 map
按照索引的升序,对数组里
存在的每个元素调用一次 callbackfn,并用结果构造一个新数组。 callbackfn 只
被实际存在的数组元素调用;它不会被缺少的数组元素调用。"
规定里面map只对存在的元素调用,而Array(10)中的元素其实尚未真实存在.所以才出现了上面的情况.
类似的还有其他一些Array.prototype上的函数也有类似问题,如forEach filter some every等.