【问题标题】:Test if something is not undefined in JavaScript测试 JavaScript 中是否未定义某些内容
【发布时间】:2011-08-12 13:56:27
【问题描述】:

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

未捕获的类型错误:无法读取未定义的属性“标题”。

【问题讨论】:

标签: javascript undefined


【解决方案1】:

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

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

【讨论】:

  • 尽管有投票数,但这并不是执行检查的好方法,因为undefined 不是 JavaScript 关键字(尽管每个人似乎都认为它是)。如果您愿意,您可以创建一个名为undefined 的变量,然后此检查将不正确。唯一正确的方法是检查(typeof myVar !== 'undefined')
  • @BadHorsie 说得通,我用你的评论更新了答案。
  • 如果变量存在并且包含读取“未定义”的字符串怎么办?
  • @BadHorsie 你的论点是假的。为什么要重新定义undefined
  • @amosrivera 不,他/她的评论没有意义。你恶化了你的答案。
【解决方案2】:

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

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

如果您仍需要明确检查标题,请在初始检查后进行:

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

【讨论】:

    【解决方案3】:

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

    typeof possiblyUndefinedVariable !== "undefined"
    

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

    【讨论】:

    • 相同 - 我发现 undefined 必须是一个字符串。
    • 这一定是 chrome 的新功能(我使用的是 win chrome 41 atm)。接受的答案过去工作得很好! :P
    【解决方案4】:

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

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

    【讨论】:

    • 我正在查看 IE 8,需要尝试一下。
    • 如果您正在测试函数是否未定义,这是最好的方法
    • 抛出错误来检查 undefined 不是一个好的解决方案。 @amosrivera 是最好的解决方案。
    • @user3658423 :它没有抛出错误。如果响应未声明,它只会阻止脚本停止(因为这会引发错误)。
    • 有时错误会有所帮助。使用您提出的解决方案,如果 doSomething() 引发异常,您将在控制台中看到的只是“responde[0].title 未定义”,而不是有关“文件 xyz 第 123 行未捕获的异常”的有用消息.js”。最终,第二个开发人员可能会注释掉 console.log() 语句,这使得第三个开发人员更难进入并修复 doSomething() 深处发生的错误。
    【解决方案5】:

    类型:

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        检查是否condition == null; 它会解决问题

        【讨论】:

        • 这应该是一条评论
        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

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

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

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

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

            【讨论】:

            • 如果我自己可以这么说的话,这是一种有趣的方法。
            【解决方案11】:

            在其中一些答案中,存在关于如何使用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/

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-03-21
              • 1970-01-01
              • 2011-10-11
              • 1970-01-01
              • 2021-10-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多