Javascript数组值未定义。。。我如何测试它

Javascript数组值未定义。。。我如何测试它,javascript,arrays,undefined,Javascript,Arrays,Undefined,我试图测试Javascript变量是否未定义 您将看到,如果我没有首先收到一个警告说“难以置信”,那么我并不期望predQuery[preId]的值是“未定义的”。但我经常这样做,所以我猜我的声明 predQuery[preId]=='undefined') 未正确匹配未定义的元素 if((predQuery.length < preId) || (predQuery[preId]=="") || (predQuery[preId]=='undefined')){ alert(

我试图测试Javascript变量是否未定义

您将看到,如果我没有首先收到一个警告说“难以置信”,那么我并不期望predQuery[preId]的值是“未定义的”。但我经常这样做,所以我猜我的声明

 predQuery[preId]=='undefined') 
未正确匹配未定义的元素

if((predQuery.length < preId) || (predQuery[preId]=="") || (predQuery[preId]=='undefined')){
   alert("its unbelievable");
   alert(predQuery[preId]);
   queryPreds[variables] = preId;
   queryObjs[variables] = objId;
   predQuery[preId] = variables;
}
else {
    alert(predQuery[preId]);
   var predIndex = predQuery[preId];
   queryPreds[predIndex] = preId;
   queryObjs[predIndex] = objId;
}
if((predQuery.length
如果需要,我可以添加更多代码。

检查

if (predQuery[preId] === undefined)

使用严格的等于运算符。请参见

数组[索引]=='undefined'
将数组索引的值与字符串“undefined”进行比较。
您可能正在查找比较类型的
typeof数组[index]='undefined'

尝试:
typeof(predQuery[preId])=='undefined'

或者更一般地说:
typeof(yourArray[yourIndex])=='undefined'


如果将“undefined”与undefined进行比较,则返回false=)

如果要检查数组索引是否包含字符串
“undefined”
,则应使用
typeof
运算符:

typeof predQuery[preId] == 'undefined'
或者使用
未定义的
全局属性:

predQuery[preId] === undefined
第一种方法更安全,因为
未定义的
全局属性是可写的,并且可以将其更改为任何其他值。

有更多(许多)方法:

//=>considering predQuery[preId] is undefined:
predQuery[preId] === undefined; //=> true
undefined === predQuery[preId] //=> true
predQuery[preId] || 'it\'s unbelievable!' //=> it's unbelievable
var isdef = predQuery[preId] ? predQuery[preId] : null //=> isdef = null
干杯

predQuery[preId]=='undefined'
您正在测试字符串
'undefined'
;您将此测试与将返回字符串的
typeof
测试混淆。您可能想针对未定义的特殊值进行测试:

predQuery[preId]===undefined
请注意严格的相等运算符以避免通常不需要的匹配
null==undefined

但是,有两种方法可以获取
未定义的
值:要么
preId
不是
predQuery
的成员,要么它是一个成员,但其值设置为特殊的
未定义的
值。通常,你只想检查它是否存在;在这种情况下,
中的
运算符更合适:

!(preId in predQuery)

这段代码运行得很好

function isUndefined(array, index) {
    return ((String(array[index]) == "undefined") ? "Yes" : "No");
}

几乎-但最佳实践是,正如deceze所说,比较typeof,因为它不能被重新定义为未定义的可以,而不是万无一失的,因为未定义的可以被定义。只需使用
window.undefined=“lolz”不可能编写JavaScript来防止每个内置项被重新定义(几乎任何东西都可以)。我不主张为了避免重新定义而降低代码的可读性
typeof
还有另一个用途,用于检测跨窗口脚本中的数据类型,但这并不适用于
未定义的
。ES5将
未定义的
强制为只读。+1与不可变的
未定义的
相比,这本身无法区分
[undefined][0]
[[0]
。如果您的数组可能为空,您可能会遇到这种情况。我在If语句中使用了(typeof(predQuery[preId])=='undefined')作为子句。@deceze。。。我的意思是,我已经更改了代码。不过,我没有编辑这个问题,因为这对未来有同样问题的人没有帮助。我明白了,很抱歉误解了o) 为什么用==代替==?