JavaScript “cannot read property ”bar" of undefined
本问题已经有最佳答案,请猛点这里访问。
我有一个函数需要3个参数。我的问题是其中一个参数是对象的一个有时未定义值的属性(即它接受thing.foo.bar,有时thing.foo未定义,因此它无法访问bar)。
怎么解决这个问题?在函数的声明中,我有一个条件检查:
如果对象的属性可能引用其他对象,则可以在尝试使用其属性之前测试该对象是否未定义:
1 2 | if (thing && thing.foo) alert(thing.foo.bar); |
如果您显示一些实际的代码,我可以更新我的答案以更好地反映您的情况,但可能类似这样:
1 2 3 4 | function someFunc(parameterName) { if (parameterName && parameterName.foo) alert(parameterName.foo.bar); } |
您可以通过以下两种方式保护自己:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 } } |
在第一个示例中,您显式地检查所引用变量的所有可能元素,以确保在使用它之前它是安全的,这样您就不会得到任何未计划的引用异常。
在第二个例子中,您只需要在它周围放置一个异常处理程序。您只需访问
复合检查:
1 2 3 | if (thing.foo && thing.foo.bar) { ... thing.foor.bar exists; } |
在传递到您的函数之前检查一下它。所以你可以通过:
1 | thing.foo ? thing.foo.bar : undefined |