Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么forEach跳过数组中尾随逗号创建的空元素?_Javascript_Arrays_Ecmascript 6_Trailing - Fatal编程技术网

Javascript 为什么forEach跳过数组中尾随逗号创建的空元素?

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});//显示

我一边玩数组,一边阅读MDN上的文档

因此,让我们设想一个场景,当您有一个数组,其中包含
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数组可以是稀疏的。不过,并非所有阵列都是。