JavaScript中检查数组项是否为"undefined"

3

我的JS代码有一个数组arrayResults,其中的一些元素可能是“undefined” - 这是算法的特性。为了检查是否存在这样的元素,我使用以下代码:

for (i in arrayResults)
        {
          if (typeof(arrayResults[i])=='undefined')
           {
              // ask user to repeat
           };
        };  

然而,使用调试器后,我发现 JS 引擎会传递数组中的 "undefined" 项(在 for 条件中) ,因此我无法进行比较和执行随后的指令。

那么,是否有任何方法可以真正检查数组中的 "undefined" 项呢?(我不能按顺序设置数组项,因为如果我找到了 "undefined" 项的位置,我会告诉用户前往该位置)。

2个回答

9
不要使用for..in循环来遍历数组。如果您对原因感兴趣,请阅读这个StackOverflow问题。它们只应该用于遍历对象。
相反,使用简单的老派for循环,它将解决您的问题。
for (var i = 0, l = arrayResults.length; i < l; i++) {
    if (typeof(arrayResults[i])=='undefined') {
         // ask user to repeat
    };
};  

jsFiddle Demo


1
在这里,传统的for循环优于所有高阶函数,如.some().reduce()甚至.indexOf(),因为数组方法会跳过所谓的“空洞”,即从未设置的“undefined”元素。 - Paul

4
您可以在数组上使用indexOf方法。
function hasUndefined(a) {
    return a.indexOf() !== -1;
}

hasUndefined([1,2,3, undefined, 5]);

1
但是 hasUndefined([1,2,3,,,,,,,7]) 返回 false,因此这不是健壮的。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接