如果某个值存在于某个数组索引处,我如何检查 JavaScript?

IT技术 javascript arrays
2021-01-23 13:22:42

这是否适用于测试位置的值是否index存在,或者是否有更好的方法:

if(arrayName[index]==""){
     // do stuff
}
6个回答

从概念上讲,JavaScript 中的数组包含array.length元素,从array[0]直到array[array.length - 1]. 具有索引的数组元素i被定义为所述阵列的一部分,如果i是间0array.length - 1包容。如果 i 不在此范围内,则它不在数组中。

因此,从概念上讲,数组是线性的,从零开始到最大值,没有任何机制可以在不存在条目的范围内产生“间隙”。要找出给定位置索引处是否存在值(其中索引为 0 或正整数),您实际上只需使用

if (i >= 0 && i < array.length) {
  // it is in array
}

现在,在幕后,JavaScript 引擎几乎肯定不会像这样线性和连续地分配数组空间,因为它在动态语言中没有多大意义,并且对于某些代码来说效率低下。它们可能是哈希表或某种混合策略,并且未定义的数组范围可能没有分配到自己的内存。尽管如此,JavaScript 语言希望将array.length n 的数组呈现为具有n 个成员,并且它们被命名为0n - 1,并且此范围内的任何内容都是数组的一部分。

然而,您可能想要的是知道数组中的值是否实际上是已定义的——也就是说,它不是undefined. 也许您甚至想知道它是否已定义而不是null. 可以在不设置成员值的情况下向数组添加成员:例如,如果您通过增加array.length属性来添加数组值,则任何新值都将是undefined.

确定给定的值是否有意义,或已定义。也就是说,不是 undefined,或者null

if (typeof array[index] !== 'undefined') {

或者

if (typeof array[index] !== 'undefined' && array[index] !== null) {

有趣的是,由于 JavaScript 的比较规则,我的最后一个示例可以优化为:

if (array[index] != null) {
  // The == and != operators consider null equal to only null or undefined
}  
@TheComposer 根据语言,Javascript 中数组的大小由 array.length 定义,据说该数组包含从0to 的所有元素array.length - 1但是,并非所有这些值都是定义值。如果在数组成员上使用 delete 关键字,它将将该成员设置回未定义状态,就像通过增加其 array.length 参数来扩展数组一样,新值将从未定义状态开始。实际上,Javascript 实现可能会优化数组存储,并且一些或所有未定义的值可能不占用内存。
2021-03-16 13:22:42
此答案不涵盖未设置数组索引的情况。 new Array(1)[0] === undefined但该值为空。 [undefined][0] === undefined但该值已设置;数组一个值。唯一完美的答案是使用inor hasOwnProperty()--idx in arrayarray.hasOwnProperty(idx)--per this answer:stackoverflow.com/a/39171620/3120446
2021-03-18 13:22:42
OP 很可能知道他/她正在处理哪种类型的数组,但只是为了完整性:类数组对象通常也包含一个length属性,在这种情况下,后两个示例更合适。
2021-03-27 13:22:42
你总是可以foo !== 'undefined' && foo !== null用 just替换foo != null
2021-03-31 13:22:42
array.length 不会迭代任何东西,它只是一个数字。
2021-04-01 13:22:42

我们不能这样做:

if(arrayName.length > 0){   
    //or **if(arrayName.length)**
    //this array is not empty 
}else{
   //this array is empty
}
if(arrayName.length) {... 失败 null
2021-03-25 13:22:42
问题是关于如何测试数组特定索引是否存在。
2021-03-27 13:22:42
请问if(arrayName.length) {...有什么区别?
2021-04-03 13:22:42
这失败了,[undefined, undefined]这是一个长度 = 2 的数组。
2021-04-04 13:22:42
为什么这么多赞?这显然不能回答问题。
2021-04-11 13:22:42

仅使用.length是不安全的,并且会在某些浏览器中导致错误。这是一个更好的解决方案:

if(array && array.length){   
   // not empty 
} else {
   // empty
}

或者,我们可以使用:

Object.keys(__array__).length
这个答案完全忽略了 OP 问题,问题是要查找数组索引是否为空,而不是整个数组!
2021-03-17 13:22:42
对于那些想要检查整个数组的人来说,很好,简短而简单的答案
2021-03-18 13:22:42
«请注意,不想检查整个数组是否为空,只是某个位置的索引值为“index”»
2021-04-12 13:22:42
if(!arrayName[index]){
     // do stuff
}
迄今为止最简单的方法
2021-03-22 13:22:42
托马斯是对的;但是,这对于许多情况(您可能应该枚举)已经足够了。
2021-03-23 13:22:42
如果数组值存在但为 0、null、"" 等,这也会起作用。
2021-03-25 13:22:42
if(arrayName.length > index && arrayName[index] !== null) {
    //arrayName[index] has a value
}
您可以使用 Firebug 之类的工具自行测试。在 Javascript 中,读取未定义变量的值不会引发异常 - 它返回未定义的值。
2021-03-19 13:22:42
@thomasrutter 我在想出一种可能以未定义的数组元素结束的方法时遇到了麻烦。
2021-03-24 13:22:42
@thomasrutter 你的第一条评论错了。x == null只会对 null 或 undefined 为真,没有别的。同样,x != null对于既不是 null 也不是 undefined 的任何东西都是真的。除非您特别需要查找 undefined,否则只需使用隐式转换的好处。
2021-03-30 13:22:42
@thomasrutter 这两个都会抛出异常,不是吗?(未定义变量未定义)
2021-04-01 13:22:42
嗯, (myarray[1] = undefinedvariable) 工作吗?或者只是 (myarray[1] = undefined)?
2021-04-06 13:22:42