我正在检查是否(响应[0]。title !== undefined),但我得到的错误:

无法读取未定义的属性“title”。


检查响应[0]是否实际存在,错误似乎表明它不存在。


这是因为响应[0]本身没有定义。


响应[0]没有定义,检查是否定义了它,然后检查它的属性标题。

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

您必须首先检查响应[0]是否未定义,如果不是,则检查其余的响应。这意味着在您的情况下,响应[0]是未定义的。


检查响应[0]是否未定义:

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

如果你仍然需要显式检查标题,请在初始检查之后执行:

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

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

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

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

typeof possiblyUndefinedVariable !== "undefined"

我将不得不在其他浏览器中测试,看看事情是如何发展的。


typeof:

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

检查条件== null; 这将解决问题


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

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

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

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

在这些回答中,对于如何使用typeof存在根本性的误解。

不正确的

if (typeof myVar === undefined) {

正确的

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

原因是typeof返回一个字符串。因此,您应该检查它返回的是字符串“undefined”而不是undefined(没有括在引号中),后者本身就是JavaScript的基本类型之一。typeof操作符永远不会返回未定义类型的值。


齿顶高

如果使用不正确的比较,您的代码在技术上可能会工作,但可能不是出于您认为的原因。JavaScript中没有预先存在的未定义变量——它不是某种可以拿来比较的神奇关键字。你可以创建一个名为undefined的变量,并给它任何你想要的值。

let undefined = 42;

下面是一个例子,你可以用它来证明第一种方法是不正确的:

https://jsfiddle.net/p6zha5dm/