Con*_*nor 29 javascript undefined
我有一个带3个参数的函数.我遇到的问题之一是参数之一是有时未定义的Object值的属性(即它接受thing.foo.bar,有时thing.foo未定义,因此它无法访问bar).
这是怎么回事?在函数的声明中,我有一个条件检查:
if (!parameterName),但浏览器(Chrome)仍然抛出一个错误,它无法读取undefined 的bar属性.
nnn*_*nnn 39
如果对象的属性可能引用某个其他对象,那么在尝试使用其属性之前,您可以测试该属性是否为undefined:
if (thing && thing.foo)
alert(thing.foo.bar);
Run Code Online (Sandbox Code Playgroud)
如果您显示一些实际代码,我可以更新我的答案以更好地反映您的情况,但可能是这样的:
function someFunc(parameterName) {
if (parameterName && parameterName.foo)
alert(parameterName.foo.bar);
}
Run Code Online (Sandbox Code Playgroud)
复合检查:
if (thing.foo && thing.foo.bar) {
... thing.foor.bar exists;
}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下两种方式保护自己:
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
}
}
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,您明确检查了所引用变量的所有可能元素,以确保它在使用之前是安全的,因此您不会获得任何计划外引用异常.
在第二个示例中,您只需在其周围放置一个异常处理程序.您只需thing.foo.bar假设它存在即可访问.如果确实存在,则代码正常运行.如果它不存在,那么它将抛出一个你将捕获并忽略的异常.最终结果是一样的.如果thing.foo.bar存在,则使用它的代码执行.如果不存在则代码不执行.在所有情况下,该功能都正常运行.
该if语句执行起来更快.在复杂的情况下编码和使用异常可能更简单,因为可能存在许多可能需要防范的事情,并且您的代码是结构化的,以便抛出异常并处理它是一种在某些数据不存在时跳过执行的简洁方法.抛出异常时,异常会慢一些.
在传递给您的函数之前,请检查它.所以你会通过:
thing.foo ? thing.foo.bar : undefined
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
129234 次 |
| 最近记录: |