我有一个函数,接受三个参数。问题在于其中一个参数是对象的某个属性(即它接收thing.foo.bar,但有时thing.foo未定义,因此无法访问bar)。
有什么办法可以解决这个问题?在函数声明中,我有一个条件检查:if (!parameterName)
,但浏览器(Chrome)仍会抛出一个错误,指出它无法读取未定义的bar属性。
我有一个函数,接受三个参数。问题在于其中一个参数是对象的某个属性(即它接收thing.foo.bar,但有时thing.foo未定义,因此无法访问bar)。
有什么办法可以解决这个问题?在函数声明中,我有一个条件检查:if (!parameterName)
,但浏览器(Chrome)仍会抛出一个错误,指出它无法读取未定义的bar属性。
如果一个对象的属性可能引用到其他对象,那么在尝试使用其属性之前,可以先测试该属性是否为undefined:
if (thing && thing.foo)
alert(thing.foo.bar);
如果您展示一些实际代码,我可以更新我的答案以更好地反映您的情况,但可能会像这样:
function someFunc(parameterName) {
if (parameterName && parameterName.foo)
alert(parameterName.foo.bar);
}
thing.foo
未定义,所以必须声明它。 - Cerbrus复合检查:
if (thing.foo && thing.foo.bar) {
... thing.foor.bar exists;
}
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 ? thing.foo.bar : undefined
thing?.foo?.bar
。 - bristweb