我正在检查if(response[0].title !== undefined)
,但我收到错误:
未捕获的TypeError:无法读取未定义的属性“title”。
答案 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;
下面是一个示例,您可以使用它来证明第一种方法不正确: