考虑:
var a = Array(3); var b = [undefined,undefined,undefined];
那是什么原因a.map和b.map产生不同的结果?
a.map
b.map
a.map(function(){ return 0; }); //produces -> [undefined,undefined,undefined] b.map(function(){ return 0; }); //produces -> [0,0,0]
数组构造函数创建具有给定长度的数组。它并不会创建密钥。Array.prototype.map的回调函数仅针对列表中的元素执行。 也就是说,这是与一个键(整数)0≤相关联的所有值 我 < 长度 。
Array.prototype.map
Array(3)
.map
[void 0, void 0, void 0]
Array(3).hasOwnProperty(0); // false
[void 0, void 0, void 0].hasOwnProperty(0); // true
该规范及其polyfill在MDN中提及。在第47行,if(k in O) {显示回调函数未处理不存在的键。
if(k in O) {