我经常发现为了避免在dom上出现未定义的错误,我必须做这样的事情:
if("undefined" != typeof parent
&& "undefined" != typeof parent.main
&& "undefined" != typeof parent.main.location){
// Act on a current iframe page from that page's parent location
}
否则,在处理如此严重嵌套的dom对象时,可能会出现未定义的错误。是否有更简单的方法来检查这些嵌套对象属性而不会破坏所有内容?
答案 0 :(得分:5)
您不需要(也不应该在这种情况下)特定于您的支票。
这样做:
if(parent && parent.main && parent.main.location) {
在查找null
值的属性时,原始代码仍会失败。这样可以处理这种情况,并以较短的方式处理。
如果需要,您可以将最后一项检查更改为更具体,但之前的检查只需要进行“真理”测试,因为您最终只是检查对象。
除此之外,你可以制作一个能够缩短这一点的功能。如果值得的话,由你决定。
function getNested(obj) {
for (var i = 1; obj && i < arguments.length; ++i) {
obj = obj[arguments[i]]
}
return obj;
}
getNested(parent, "main", "location");
另一个替代方案是:
if(((parent || {}).main || {}).location) {
如果返回了一个假值,|| {}
将替换一个对象,避免错误。