如何检查一个深度属性是否存在

How to check existence of a deep property

本文关键字:深度 属性 是否 存在 一个 何检查 检查      更新时间:2023-09-26

对于以下代码是否有更好的解决方案:

 if (response && response.responseJSON && response.responseJSON.message) {
        //code
}

你做的很好。它看起来有点丑,但它清楚地说明了发生了什么。如果你真的想,你可以把完整的表达式放在一个try-catch块中,但这将是一个糟糕的练习,更难阅读/维护。

我猜你想要像Groovy的"安全导航操作符"那样的东西,所以你可以这样做:

if (response?.responseJSON?.message)

但是Javascript没有这样的东西

您总是可以使用辅助函数:

Object.prototype.deepExist = function(attPath){
    var o = this,
        path = attPath.split(".");
    for (var i=0; i<path.length; i++){
        o = o[path[i]];
        if (!o) {
            return false;   
        }
    }
    return true;
}

用法:

if (response.deepExist("responseJSON.message")){
    //code
}