【发布时间】:2011-08-12 13:56:27
【问题描述】:
我正在检查if(response[0].title !== undefined),但我得到了错误:
未捕获的类型错误:无法读取未定义的属性“标题”。
【问题讨论】:
-
在 stackoverflow 中查看答案。 stackoverflow.com/questions/858181/…
标签: javascript undefined
我正在检查if(response[0].title !== undefined),但我得到了错误:
未捕获的类型错误:无法读取未定义的属性“标题”。
【问题讨论】:
标签: javascript undefined
response[0] 未定义,检查是否已定义,然后检查其属性标题。
if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
//Do something
}
【讨论】:
undefined 不是 JavaScript 关键字(尽管每个人似乎都认为它是)。如果您愿意,您可以创建一个名为undefined 的变量,然后此检查将不正确。唯一正确的方法是检查(typeof myVar !== 'undefined')。
undefined?
只需检查 response[0] 是否未定义:
if(response[0] !== undefined) { ... }
如果您仍需要明确检查标题,请在初始检查后进行:
if(response[0] !== undefined && response[0].title !== undefined){ ... }
【讨论】:
上面的所有其他代码示例都有问题。在 Chrome 中,这是对我有用的条件:
typeof possiblyUndefinedVariable !== "undefined"
我将不得不在其他浏览器中对其进行测试,看看情况如何。
【讨论】:
undefined 必须是一个字符串。
实际上,您必须用 Try/Catch 块包围它,这样您的代码才不会停止工作。 像这样:
try{
if(typeof response[0].title !== 'undefined') {
doSomething();
}
}catch(e){
console.log('responde[0].title is undefined');
}
【讨论】:
类型:
var foo;
if (typeof foo == "undefined"){
//do stuff
}
【讨论】:
这是因为response[0] 本身是未定义的。
【讨论】:
检查是否condition == null;
它会解决问题
【讨论】:
检查你的response[0] 是否确实存在,错误似乎表明它不存在。
【讨论】:
您必须首先检查response[0] 是否未定义,如果不是,则检查其余部分。这意味着在您的情况下,response[0] 未定义。
【讨论】:
我知道我迟到了 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's primitive types 之一。 typeof 运算符永远不会返回 undefined 类型的值。
附录
如果您使用不正确的比较,您的代码在技术上可能有效,但可能不是您认为的原因。 JavaScript 中没有预先存在的undefined 变量——它不是某种可以与之比较的神奇关键字。您实际上可以创建一个名为 undefined 的变量,并为其赋予任何您喜欢的值。
let undefined = 42;
下面是一个例子,你可以用它来证明第一种方法是不正确的:
【讨论】: