JavaScript只记录未定义的';你是怎么定义的?

JavaScript只记录未定义的';你是怎么定义的?,javascript,Javascript,运行此代码时,我希望它记录5个未定义的。然而,我只看到两个。JavaScript似乎只记录您自己定义的未定义的 var a = []; a[0]=undefined; a[4]=undefined; a.forEach((i)=>console.log(i)) 此日志记录: undefined undefined 您不希望它记录4个未定义的吗 以下是一个。引用mdn: 方法按升序为数组中的每个元素执行一次提供的回调。对于已删除或未初始化的索引属性(例如,在您的示例中的稀疏数组上),不会

运行此代码时,我希望它记录5个未定义的
。然而,我只看到两个。JavaScript似乎只记录您自己定义的
未定义的

var a = [];
a[0]=undefined;
a[4]=undefined;
a.forEach((i)=>console.log(i))
此日志记录:

undefined
undefined
您不希望它记录4个未定义的

以下是一个。

引用mdn: 方法按升序为数组中的每个元素执行一次提供的回调。对于已删除或未初始化的索引属性(例如,在您的示例中的稀疏数组上),不会调用它


据我所知,lo-dash
forEach
方法与您预期的不同。

因此javascripts数组基本上只是具有整数键的特殊OBEJCT(有一些细微的区别)。因此,您定义了一个具有两个关键点值的对象。0:未定义和3:未定义。因为数组中只有2个对象,所以它只打印2个未定义的对象。

这是因为
forEach
循环

forEach()按升序为数组中的每个元素执行一次提供的回调。对于已删除或未初始化的索引属性(即在稀疏数组上),不会调用它

--来源

示例代码段:

var a=[];
a[0]=未定义;
a[4]=未定义;
a、 forEach(函数(i){
控制台日志(i)
})
对于(变量i=0;i}
.forEach
仅对数组中的值进行迭代。未设置为未定义的索引实际上不是未定义的,而是空的。不过,Chrome会将它们报告为未定义,只是为了混淆问题。
for
循环按您的预期工作,如果您登录
a[1]
您会得到
未定义的
未定义的
未定义的
:我最喜欢的新单词