Javascript 为什么forEach跳过数组中尾随逗号创建的空元素?
我一边玩数组,一边阅读MDN上的文档 因此,让我们设想一个场景,当您有一个数组,其中包含Javascript 为什么forEach跳过数组中尾随逗号创建的空元素?,javascript,arrays,ecmascript-6,trailing,Javascript,Arrays,Ecmascript 6,Trailing,我一边玩数组,一边阅读MDN上的文档 因此,让我们设想一个场景,当您有一个数组,其中包含Number,未定义的元素,并且创建了一个带有尾随逗号的数组,并在该数组上运行forEach()。请参阅文档中的: forEach()按升序为数组中的每个元素调用一次提供的回调函数。对于已删除或未初始化的索引属性,不会调用它 基于此,它将跳过使用尾随逗号创建的元素,而不是未定义的元素: const数组=[1,2,4,未定义,]; console.log({length:array.length});//显示
Number
,未定义的元素,并且创建了一个带有尾随逗号的数组,并在该数组上运行forEach()
。请参阅文档中的:
forEach()
按升序为数组中的每个元素调用一次提供的回调函数。对于已删除或未初始化的索引属性,不会调用它
基于此,它将跳过使用尾随逗号创建的元素,而不是未定义的元素:
const数组=[1,2,4,未定义,];
console.log({length:array.length});//显示6
array.forEach((e,i)=>console.log({e,i}));//记录4个元素
将某物设置为未定义
仍在设置它--您使用/未定义
初始化了它。“引擎盖下”它知道您定义了哪些元素。您正在使用未定义的初始化该项,但是如果您留下空白
,您知道该项必须在那里,但它没有初始化,它没有值/类型
,因此在.forEach()
上跳过它。请注意,后面的逗号刚刚被忽略,好像你从来没有写过。创建省略的逗号永远不是尾随逗号。数组是稀疏的,“空”元素不存在。运行以下命令:Object.getOwnPropertyDescriptors(数组)
@terrymore数组可以是稀疏的。不过,并非所有阵列都是。