对嵌套dom对象属性的typeof进行多次检查的更好替代方法

时间:2014-01-01 18:18:16

标签: javascript dom undefined

我经常发现为了避免在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对象时,可能会出现未定义的错误。是否有更简单的方法来检查这些嵌套对象属性而不会破坏所有内容?

1 个答案:

答案 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) {

如果返回了一个假值,|| {}将替换一个对象,避免错误。