Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 为什么Object.keys([,1,1])与Object.keys([,1,未定义,1])不同?_Javascript_Arrays - Fatal编程技术网

Javascript 为什么Object.keys([,1,1])与Object.keys([,1,未定义,1])不同?

Javascript 为什么Object.keys([,1,1])与Object.keys([,1,未定义,1])不同?,javascript,arrays,Javascript,Arrays,我感到震惊的是 document.writeln(Object.keys([1,1])在Object.keys([,1,undefined,1])的情况下,您显式地将第三个元素定义为undefined,但在Object.keys([,1,1])中,没有与索引2关联的元素。因此,在第一种情况下,2被识别为数组索引,但在第二种情况下不被识别 为了表示数组中的孔,当您实际引用它时,将返回undefined。这就是为什么[,1,1][2]是未定义的这是使用Javascript数组时要小心的一个警告:可

我感到震惊的是

document.writeln(Object.keys([1,1])
Object.keys([,1,undefined,1])
的情况下,您显式地将第三个元素定义为
undefined
,但在
Object.keys([,1,1])
中,没有与索引
2
关联的元素。因此,在第一种情况下,
2
被识别为数组索引,但在第二种情况下不被识别


为了表示数组中的孔,当您实际引用它时,将返回
undefined
。这就是为什么
[,1,1][2]
未定义的

这是使用Javascript数组时要小心的一个警告:可以使用稀疏数组,缺少值的数组,这与使用
未定义的
值不同(数组元素存在,就像可以声明变量一样,但其值为“未定义”)

请注意,在数组元素上使用
delete
可以获得相同的行为


如前所述,您可以使用
===undefined
测试空值,这更令人困惑,因为它通常不会导致相同的输出。

您认为它没有多大意义是对的。它没有多大意义。基本上,在javascript中,“undefined”和“从未定义”之间有时会有区别。在第一个示例中,您没有给第二个索引任何值,因此它不会打印。在第二个示例中,您给它一个值(即使该值未定义,它仍会得到一个值)所以它会打印出来。

如果你
console.log
这两个数组你会注意到一个不同,第一个数组显示
,第二个数组显示
未定义的
。当你试图访问一个空插槽时,数组会返回
未定义的
,但这不是其中的值