我很震惊
的结果
document.writeln(Object.keys([,1,,1]));

是
1,3
过滤自动不包含任何内容的数组的索引。但是当我尝试打印出Object.keys([,1,undefined,1])时:
document.writeln(Object.keys([,1,undefined,1]));

结果是:
1,2,3
与前一个不同,我尝试在第一个上打印索引2的值:
document.writeln([,1,,1][2]);

实际上是未定义的。为什么Object.keys([,1,,1])和Object.keys([,1,undefined,1])会返回不同的结果?
答案 0 :(得分:3)
在Object.keys([, 1, undefined, 1])
案例中,您明确将第三个元素定义为undefined
,但在Object.keys([, 1, , 1])
中,没有与索引2
相关联的元素。因此,2
在第一种情况下被识别为数组索引,但在第二种情况下则不被识别。
只是为了表示数组中的孔,当您实际引用它时,将返回undefined
。这就是为什么[, 1, , 1][2]
是undefined
。
答案 1 :(得分:0)
对于Javascript数组,请注意以下几点:您可以使用稀疏数组,缺少值的数组,这与{{1}不同} values (数组元素存在,就像可以声明变量一样,但它的值是'未定义的)。
请注意,您可以在数组元素上使用undefined
获得相同的行为。
如上所述,您可以使用delete
测试空值,这更令人困惑,因为它通常不会导致相同的输出。
答案 2 :(得分:0)
你认为它没有多大意义是正确的。它没有。基本上,在javascript中有有时" undefined"之间的区别。和"从未被定义过"。在第一个示例中,您没有给第二个索引任何值,因此它不会打印。在第二个示例中,您为其提供了一个值(即使该值未定义,它仍然 值),因此它会打印它。