小编典典

Array(len)初始化程序中的未定义值

javascript

考虑:

var a = Array(3);
var b = [undefined,undefined,undefined];

那是什么原因a.mapb.map产生不同的结果?

a.map(function(){  return 0;  });  //produces -> [undefined,undefined,undefined]
b.map(function(){  return 0;  });  //produces -> [0,0,0]

阅读 387

收藏
2020-05-01

共1个答案

小编典典

数组构造函数创建具有给定长度的数组。它并不会创建密钥。Array.prototype.map的回调函数仅针对列表中的元素执行。
也就是说,这是与一个键(整数)0≤相关联的所有值 < 长度

  • 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) {显示回调函数未处理不存在的键。

2020-05-01