我经常发现,为了避免在 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 对象时,可能会出现未定义的错误。有没有更简单的方法来检查这些嵌套对象属性而不破坏所有内容?
最佳答案
您不需要(在这种情况下不应该)对您的支票如此具体。
只需这样做:
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) {
如果返回了错误的值,|| {}
将替换一个对象,避免错误。
关于javascript - 更好地替代对嵌套 dom 对象属性的 typeof 进行多次检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20871709/