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
这两个数组你会注意到一个不同,第一个数组显示
,第二个数组显示未定义的
。当你试图访问一个空插槽时,数组会返回未定义的
,但这不是其中的值