从概念上讲,JavaScript 中的数组包含array.length
元素,从array[0]
直到......为止array[array.length - 1]
。带索引的数组元素i
被定义为数组的一部分,如果i
在。。。之间0
and array.length - 1
包括的。如果 i 不在这个范围内,则它不在数组中。
因此,从概念上来说,数组是线性的,从零开始一直到最大值,没有任何机制可以在不存在条目的范围内产生“间隙”。要查明某个值是否存在于给定位置索引处(其中索引为 0 或正整数),您只需使用
if (i >= 0 && i < array.length) {
// it is in array
}
现在,在底层,JavaScript 引擎几乎肯定不会像这样线性且连续地分配数组空间,因为它在动态语言中没有多大意义,并且对于某些代码来说效率很低。它们可能是哈希表或某种混合策略,并且数组的未定义范围可能没有分配自己的内存。尽管如此,JavaScript 这种语言想要呈现数组array.length
n作为有n成员并被命名为0 to n - 1,并且此范围内的任何内容都是数组的一部分。
然而,您可能想要知道数组中的值是否是实际上是定义的东西- 也就是说,它不是undefined
。也许您甚至想知道它是否已定义并且not null
。可以在不设置成员值的情况下将成员添加到数组中:例如,如果通过增加array.length
属性,任何新值都将是undefined
.
确定给定值是否有意义或已定义。那是,not undefined
, or null
:
if (typeof array[index] !== 'undefined') {
or
if (typeof array[index] !== 'undefined' && array[index] !== null) {
有趣的是,由于 JavaScript 的比较规则,我的最后一个示例可以优化为:
if (array[index] != null) {
// The == and != operators consider null equal to only null or undefined
}