测试JavaScript中是否未定义某些内容

时间:2011-08-12 13:56:27

标签: javascript undefined

我正在检查if(response[0].title !== undefined),但我收到错误:

  

未捕获的TypeError:无法读取未定义的属性“title”。

11 个答案:

答案 0 :(得分:337)

未定义

response[0],检查是否已定义,然后检查其属性标题。

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}

答案 1 :(得分:37)

只检查response[0]是否未定义:

if(response[0] !== undefined) { ... }

如果您仍需要明确检查标题,请在初步检查后执行此操作:

if(response[0] !== undefined && response[0].title !== undefined){ ... }

答案 2 :(得分:34)

上面的所有其他代码示例都遇到了问题。在Chrome中,这是对我有用的条件:

typeof possiblyUndefinedVariable !== "undefined"

我将不得不在其他浏览器中对其进行测试,看看情况如何。

答案 3 :(得分:11)

实际上你必须用Try / Catch块包围它,这样你的代码就不会停止工作了。 像这样:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }

答案 4 :(得分:8)

的typeof:

var foo;
if (typeof foo == "undefined"){
  //do stuff
}

答案 5 :(得分:1)

这是因为response[0]本身未定义。

答案 6 :(得分:1)

检查condition == null; 它将解决问题

答案 7 :(得分:0)

检查您是否response[0]确实存在,错误似乎表明它不存在。

答案 8 :(得分:0)

您必须首先检查response[0]是否未定义,只有在未定义时,检查其余部分。这意味着在您的情况下,response[0]未定义。

答案 9 :(得分:0)

我知道我迟到了7个月,但我发现了这个问题,看起来很有趣。我在浏览器控制台上试过这个。

try{x,true}catch(e){false}

如果变量x未定义,则捕获错误并且它将为false,否则,它将返回true。因此,您可以使用eval函数将值设置为变量

var isxdefined = eval('try{x,true}catch(e){false}')

答案 10 :(得分:0)

在其中一些答案中,人们对如何使用typeof有基本的误解。

不正确

if (typeof myVar === undefined) {

正确

if (typeof myVar === 'undefined') {

原因是typeof返回一个字符串。因此,您应该检查它是否返回了字符串“ undefined”,而不是undefined(未包含在引号中),它本身是JavaScript's primitive types之一。 typeof运算符将永远不会返回类型undefined的值。


附录

如果使用不正确的比较,您的代码在技术上可能会起作用,但可能并非出于您的考虑原因。 JavaScript中没有预先存在的undefined变量-您无法将其与某种魔术关键字进行比较。您实际上可以创建一个名为undefined的变量,并为其提供所需的任何值。

let undefined = 42;

下面是一个示例,您可以使用它来证明第一种方法不正确:

https://jsfiddle.net/p6zha5dm/