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

Kzq*_*qai 3 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
}
Run Code Online (Sandbox Code Playgroud)

否则,当使用如此大量嵌套的dom对象时,就有可能会得到未定义的错误。有没有更简单的方法来检查这些嵌套对象的属性而不破坏所有内容?

coo*_*ter 5

您不需要(在这种情况下也不应该)对支票如此具体。

只是这样做:

if(parent && parent.main && parent.main.location) {
Run Code Online (Sandbox Code Playgroud)

查找null值的属性时,原始代码仍将失败。这可以以更短的方式处理这种情况。

您可以根据需要将最后一个检查更改为更具体,但是在此之前的检查仅需要进行“真实”测试,因为您最终只是在检查对象。

除此之外,您可以创建一个函数来将其缩短一点。如果您值得,则取决于您。

function getNested(obj) {
    for (var i = 1; obj && i < arguments.length; ++i) {
        obj = obj[arguments[i]]
    }
    return obj;
}
Run Code Online (Sandbox Code Playgroud)
getNested(parent, "main", "location");
Run Code Online (Sandbox Code Playgroud)

另一个替代方法是:

if(((parent || {}).main || {}).location) {
Run Code Online (Sandbox Code Playgroud)

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