JavaScript中Array.prototype.map使用的一个注意事项

来源:互联网 发布:魔兽争霸源码 编辑:程序博客网 时间:2024/06/01 09:01

首先看一段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等.


0 0