36

我正在尝试测试是否未定义 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;
}

如果需要,我可以添加更多代码。

4

7 回答 7

73

array[index] == 'undefined'将数组索引的与字符串“未定义”进行比较。
您可能正在寻找typeof array[index] == 'undefined',它比较类型

于 2010-04-20T06:55:28.660 回答
14

您正在检查它的数组索引是否包含一个字符串"undefined",您应该使用typeof运算符:

typeof predQuery[preId] == 'undefined'

或者使用undefined全局属性:

predQuery[preId] === undefined

第一种方式更安全,因为undefined全局属性是可写的,并且可以更改为任何其他值。

于 2010-04-20T06:56:18.253 回答
8
predQuery[preId]=='undefined'

您正在针对字符串 'undefined'进行测试;您将此测试与typeof返回字符串的测试混淆了。您可能的意思是针对特殊值进行测试undefined

predQuery[preId]===undefined

请注意严格相等运算符以避免通常不需要的 match null==undefined

但是,您可以通过两种方式获取undefined值:preId不是 的成员predQuery,或者它成员但具有设置为特殊值的undefined值。通常,您只想检查它是否存在;在这种情况下,in运算符更合适:

!(preId in predQuery)
于 2010-04-20T07:44:39.733 回答
4

去罗马有更多(很多)方式:

//=>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

干杯!

于 2010-04-20T07:22:08.753 回答
2

检查

if (predQuery[preId] === undefined)

使用严格的等于运算符。查看比较运算符

于 2010-04-20T06:55:12.497 回答
2

尝试:typeof(predQuery[preId])=='undefined'
或更一般地说:typeof(yourArray[yourIndex])=='undefined'
您将“未定义”与未定义进行比较,它返回 false =)

于 2010-04-20T06:56:16.110 回答
1

这段代码效果很好

function isUndefined(array, index) {
    return ((String(array[index]) == "undefined") ? "Yes" : "No");
}
于 2016-03-06T14:44:34.973 回答