javascript - 更好地替代对嵌套 dom 对象属性的 typeof 进行多次检查

标签 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 对象时,可能会出现未定义的错误。有没有更简单的方法来检查这些嵌套对象属性而不破坏所有内容?

最佳答案

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

只需这样做:

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/

相关文章:

javascript - 当选择选项已被另一个选择选项选择时,如何禁用选择选项中的值

javascript - 如何使用 javascript 读取包含(管道分隔)值的 .psv 文件数据

javascript - 使用 Polymer 通过 HTML 导入包含 jQuery 在 Safari 和 Firefox 中不起作用

javascript - javascript中是否有类似 string.isnullorempty() 的函数

同一类中的 JavaScript 调用方法未定义?

javascript - nouislider handle 超过了它的杆长

javascript - jQuery 事件命名空间是如何工作的

javascript - HTML 文件脚本和 CSS 放置

javascript - 在 JavaScript 中,e.target 没有像我预期的那样工作

javascript - 从数组中过滤 NaN