Test if something is not undefined in JavaScript
我正在检查if(response[0].title !== undefined),但我得到了错误:
Uncaught TypeError: Cannot read property 'title' of undefined.
号
- 请参阅StackOverflow中的答案。stackoverflow.com/questions/858181/…
- 可能重复的javascript:未定义!==未定义?
未定义response[0],请检查是否已定义,然后检查其属性标题。
1 2 3
| if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
//Do something
} |
- 尽管投票数众多,但这并不是执行检查的好方法,因为undefined不是一个javascript关键字(尽管每个人都认为它是)。如果您愿意,可以创建一个名为undefined的变量,然后这种检查将是不正确的。唯一正确的方法是检查(typeof myVar !== 'undefined')。
- @Badhorsie说得通,我用你的评论更新了答案。
- 如果变量存在,并且包含读取"未定义"的字符串,该怎么办?
只需检查response[0]是否未定义:
1
| if(response[0] !== undefined) { ... } |
如果仍然需要显式检查标题,请在初始检查后执行此操作:
1
| if(response[0] !== undefined && response[0].title !== undefined){ ... } |
我在上面的所有其他代码示例中都遇到了问题。在铬合金中,这是我的工作条件:
1
| typeof possiblyUndefinedVariable !=="undefined" |
我必须在其他浏览器中测试它,看看情况如何。
- 同样-我发现undefined必须是一个字符串。
- 这一定是Chrome的新功能(我在Win Chrome 41 ATM上)。这个被接受的答案过去工作得很好!P
实际上,您必须用一个try/catch块包围它,这样您的代码就不会停止工作。这样地:
1 2 3 4 5 6 7
| try{
if(typeof response[0].title !== 'undefined') {
doSomething();
}
}catch(e){
console.log('responde[0].title is undefined');
} |
- 我在看IE8,需要试着接球。
- 如果要测试函数是否未定义,这是最好的方法
- 抛出一个错误来检查未定义不是一个好的解决方案。@阿莫斯里维拉是最好的解决方案。
- @用户3658423:它没有抛出错误。它只防止在未声明响应时停止脚本(因为这样会引发错误)。
- 有时,错误是有帮助的。在您建议的解决方案中,如果dosomething()引发异常,您在控制台中看到的将是"respond[0].title is undefined",而不是关于"un-catched exception@line 123 of file xyz.js"的有用消息。最后,第二个开发人员可能会对console.log()语句进行注释,这使得第三个开发人员更难进入并修复dosomething()内部发生的错误。
- 是的@埃里克,你完全正确。然而,我的代码片段并不打算超越回答OP的问题,即检查"something"是否未定义。换句话说,下面的步骤将相应地处理catch块中出现的任何错误。
类型:
1 2 3 4
| var foo;
if (typeof foo =="undefined"){
//do stuff
} |
检查EDOCX1[6]它可以解决问题
这是因为response[0]本身是未定义的。
我知道我迟到了7个月,但我发现了这个问题,看起来很有趣。我在浏览器控制台上尝试了这个。
1
| try{x,true}catch(e){false} |
如果变量x未定义,则会捕获错误并将其设为假,否则将返回真。因此,可以使用eval函数将值设置为变量
1
| var isxdefined = eval('try{x,true}catch(e){false}') |
您必须首先检查response[0]是否未定义,如果没有定义,请检查其余部分。这意味着在你的例子中,response[0]是未定义的。
检查你是否是response[0]实际存在,错误似乎表明它不存在。