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

考虑:

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]

回答:

数组构造函数创建具有给定长度的数组。它并不会创建密钥。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) {显示回调函数未处理不存在的键。

以上是 Array(len)初始化程序中的未定义值 的全部内容, 来源链接: utcz.com/qa/398156.html

回到顶部