Array(len)初始化程序中的未定义值
考虑:
var a = Array(3);var b = [undefined,undefined,undefined];
那是什么原因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(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