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,在中进行的朴素测试表明,速度大致相同:-)