Javascript数组值未定义...我该如何测试

Ank*_*kur 31 javascript arrays undefined

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

你会看到我并不期望predQuery [preId]的值是'未定义的'如果我没有先得到一个警告说"它难以置信".但我经常这样做,所以我猜我的说法

 predQuery[preId]=='undefined') 
Run Code Online (Sandbox Code Playgroud)

未正确匹配未定义的元素.

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;
}
Run Code Online (Sandbox Code Playgroud)

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

dec*_*eze 65

array[index] == 'undefined'将数组索引的与字符串"undefined"进行比较.
您可能正在寻找typeof array[index] == 'undefined',比较类型.

  • +1与不可变类型进行比较而不是可变的`undefined` (3认同)
  • 仅这一点无法区分`[undefined] [0]`和`[] [0]`.如果你的阵列有可能是空的,你可能会遇到这种情况. (2认同)

CMS*_*CMS 13

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

typeof predQuery[preId] == 'undefined'
Run Code Online (Sandbox Code Playgroud)

或者使用undefined全局属性:

predQuery[preId] === undefined
Run Code Online (Sandbox Code Playgroud)

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


bob*_*nce 7

predQuery[preId]=='undefined'
Run Code Online (Sandbox Code Playgroud)

你正在测试字符串 'undefined' ; 你把这个测试与typeof将返回一个字符串的测试混淆了.您可能意味着要针对特殊值进行测试undefined:

predQuery[preId]===undefined
Run Code Online (Sandbox Code Playgroud)

请注意strict-equality运算符以避免通常不需要的匹配null==undefined.

但是,有两种方法可以获取undefined值:要么preId不是其成员predQuery,要么成员但具有设置为特殊undefined值的值.通常,您只想检查它是否存在; 在这种情况下,in运营商更合适:

!(preId in predQuery)
Run Code Online (Sandbox Code Playgroud)