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