Javascript 我可以使用';在';关键字来测试(树)对象中的属性

Javascript 我可以使用';在';关键字来测试(树)对象中的属性,javascript,Javascript,假设我得到了以下对象: Variables.settings.backend.url = 'http://localhost'; 要测试的是url是否可用,请执行以下操作: if ('settings' in Variables && 'backend' in Variables.settings && 'url' in Variables.settings.backend) { // true } 这相当麻烦 如果这是PHP,我可以这样做 if (!em

假设我得到了以下对象:

Variables.settings.backend.url = 'http://localhost';
要测试的是
url
是否可用,请执行以下操作:

if ('settings' in Variables && 'backend' in Variables.settings && 'url' in Variables.settings.backend) {
  // true
}
这相当麻烦

如果这是PHP,我可以这样做

if (!empty($variables['settings']['backend']['url']) {
  //true
}

这在JS中可以做得更简单吗?

我编写了一个函数来测试这一点:

var isModuleDefined = function(moduleName) {
    var d = moduleName.split(".");
    var md = d[0];
    for (var i = 1, len = d.length; i <= len; i++) {
        if (eval("typeof " + md) !== "undefined") {
            md = md + "." + d[i];
            continue;
        }
        break;
    }
    return i === len + 1;
};

isModuleDefined("Variables.settings.backend.url");
var isModuleDefined=函数(moduleName){
var d=模块名称拆分(“.”);
var-md=d[0];

对于(var i=1,len=d.length;i我编写了一个函数来测试这一点:

var isModuleDefined = function(moduleName) {
    var d = moduleName.split(".");
    var md = d[0];
    for (var i = 1, len = d.length; i <= len; i++) {
        if (eval("typeof " + md) !== "undefined") {
            md = md + "." + d[i];
            continue;
        }
        break;
    }
    return i === len + 1;
};

isModuleDefined("Variables.settings.backend.url");
var isModuleDefined=函数(moduleName){
var d=模块名称拆分(“.”);
var-md=d[0];
对于(var i=1,len=d.length;i另一个变量

function isFieldExist(expression){
    var fields = expression.split('.'),
        cur = this;

    for(var i=0; i<fields.length; i++){
        if(typeof cur[fields[i]] === "undefined") return false;
        cur = cur[fields[i]];
    }
    return true;    
}
另一种变体

function isFieldExist(expression){
    var fields = expression.split('.'),
        cur = this;

    for(var i=0; i<fields.length; i++){
        if(typeof cur[fields[i]] === "undefined") return false;
        cur = cur[fields[i]];
    }
    return true;    
}

变量['settings']['backend']['url']!==undefined@BOSS如果
Variables['settings']
未定义
undefined@BOSS如果
变量['settings']
未定义的
然后引发异常??比我的解决方案更好,看起来faster@Hacketo,天真的测试中显示,速度大致相同:-)比我的解决方案更好,看起来faster@Hacketo,在中进行的朴素测试表明,速度大致相同:-)