Javascript“无法读取未定义的属性”栏“
这个问题在这里已经有了答案:
如果一个对象的属性可能引用某个其他对象,那么您可以在尝试使用它的属性之前对其进行测试:
if (thing && thing.foo)
alert(thing.foo.bar);
我可以更新我的答案,以更好地反映你的情况,如果你显示一些实际的代码,但可能是这样的:
function someFunc(parameterName) {
if (parameterName && parameterName.foo)
alert(parameterName.foo.bar);
}
您可以通过以下两种方式来保护自己:
function myFunc(thing) {
if (thing && thing.foo && thing.foo.bar) {
// safe to use thing.foo.bar here
}
}
function myFunc(thing) {
try {
var x = thing.foo.bar;
// do something with x
} catch(e) {
// do whatever you want when thing.foo.bar didn't work
}
}
在第一个示例中,您明确地检查了您所引用的变量的所有可能元素,以确保在使用它之前它是安全的,因此您不会收到任何计划外参考异常。
在第二个示例中,您只需在其中放置一个异常处理程序。 假设它存在,您只需访问thing.foo.bar
。 如果它确实存在,那么代码正常运行。 如果它不存在,那么它会抛出一个你会忽略的异常。 最终结果是一样的。 如果thing.foo.bar
存在,则使用它的代码将执行。 如果它不存在代码不执行。 在所有情况下,该功能正常运行。
if
语句执行起来更快。 在可能有许多可能的情况需要防范并且代码结构化的复杂情况下,异常可以更简单地进行编码和使用,以便引发异常并处理它是在某些数据不存在时跳过执行的干净方式。 抛出异常时,异常会慢一点。
复合检查:
if (thing.foo && thing.foo.bar) {
... thing.foor.bar exists;
}
链接地址: http://www.djcxy.com/p/22633.html