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


Answers:


345

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

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

20
尽管有很多票,但这不是执行检查的好方法,因为undefined它不是JavaScript关键字(尽管每个人似乎都认为是)。如果愿意,可以创建一个名为的变量undefined,然后此检查将是不正确的。唯一正确的方法是检查(typeof myVar !== 'undefined')
BadHorsie

4
@BadHorsie很有道理,我用您的评论更新了答案。
amosrivera

1
如果变量存在并且包含读取“ undefined”的字符串怎么办?
TomeeNS '19

@BadHorsie您的论点是虚假的。为什么要重新定义undefined
罗伯·西默

@amosrivera不,他/她的评论没有道理。你恶化了答案。
罗伯·西默

39

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

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

如果仍然需要显式检查标题,请在初步检查后进行:

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

35

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

typeof possiblyUndefinedVariable !== "undefined"

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


2
一样-我发现undefined必须是字符串。
remarsh 2013年

这一定是chrome的新功能(我在chrome 41 atm上胜出)。公认的答案过去工作正常!:P
joe 2015年

13

实际上,您必须在其周围加上一个Try / Catch块,以便您的代码不会停止工作。像这样:

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

我正在查看IE 8,需要尝试一下。
RonanOD 2013年

1
这是测试功能是否未定义的最佳方法
edepperson 2014年

抛出错误以检查未定义不是一个好的解决方案。@amosrivera是最好的解决方案。
user3658423 2015年

@ user3658423:它没有引发错误。仅在未声明响应的情况下阻止脚本停止(因为这将引发错误)。
安德烈·路易兹

有时错误可能会有所帮助。对于您提出的解决方案,如果doSomething()引发异常,则您在控制台中看到的只是“ responde [0] .title未定义”,而不是有关“未捕获的异常@文件xyz的第123行”的有用消息。 .js”。最终,第二个开发人员可能会注释掉console.log()语句,这使第3个开发人员更难进入并修复doSomething()内部发生的错误。
埃里克·海斯特兰德




0

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


0

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


0

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

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

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

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

1
如果我自己这么说,这是一个有趣的方法。
布兰迪托

0

在其中的一些答案中,对于使用方法存在根本性的误解typeof

不正确的

if (typeof myVar === undefined) {

正确

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

原因是typeof返回一个字符串。因此,您应该检查它是否返回了字符串“ undefined”而不是undefined(不是用引号引起来的)字符串,它本身就是JavaScript的原始类型之一。该typeof运营商将不会返回类型的值undefined


附录

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

let undefined = 42;

这是一个示例,说明如何使用此方法来证明第一种方法不正确:

https://jsfiddle.net/p6zha5dm/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.