繁体   English   中英

为什么Object.keys([,1,,1])与Object.keys([,1,undefined,1])不同?

[英]Why is Object.keys([,1,,1]) different from Object.keys([,1,undefined,1])?

我感到震惊的结果

 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])会返回不同的结果?

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

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

这是Javascript数组要小心的一个警告:你可以拥有稀疏数组缺少值的数组,这与具有undefined 值的数据不同 (数组元素存在,就像可以声明变量一样,但是它的值是'undefined' )。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM