我需要检查一个属性是否包含一个属性,现在我正在使用示例中的if语句
下面是一个示例对象
var Foo = {
"bar" :
{
"foobar":
{
"barfoo":1
}
}
}
我需要检查barfoo
是否存在,但首先我需要检查所有其他属性是否都在那里,因为它们可能不依赖于另一个函数是否已经运行。我也不能真正减少这种结构的级别,所以这不是一个选择。
目前我正在做类似的事情:
var d = Foo;
if (d) {
d = d.bar;
if (d) {
d = d.foobar;
if (d) {
d = d.barfoo;
if(d){
console.log(d);
}
}
}
}
发布于 2013-03-27 02:45:00
更健壮的解决方案:检入对象的任意深度
var Foo = {
"bar": {
"foobar": {
"barfoo": {
"ddd": 1
}
}
}
};
function checkProps(obj) {
var ref = obj, arg, i;
for (i = 1; i < arguments.length; i += 1) {
arg = arguments[i];
if(ref.hasOwnProperty(arg)){
ref = ref[arg]
} else {
return false;
}
}
return true;
}
//the function takes the object to search as first parameter and any other properties [,prop1,prop2,...]
console.log(checkProps(Foo, 'bar', 'foobar', 'barfoo', 'ddd'));
发布于 2013-03-27 02:36:38
您可以在一条if
语句中完成所有这些操作:
if (d && d.bar && d.bar.foobar && d.bar.foobar.barfoo)
这之所以有效,是因为如果有任何元素失败,javascript就会停止检查if语句,这样就不会出现像cannot check property of undefined
这样的错误。
否则,您可以使用try catch语句:
var barfoo;
try{
barfoo = d.bar.foobar.barfoo
}
catch(e){
barfoo = null;
}
发布于 2013-03-27 02:38:01
你可以只用&&
做一条if语句--它会做短路评估。
if (d
&& d.hasOwnProperty('bar')
&& d.bar.hasOwnProperty('foobar')
&& d.bar.foobar.hasOwnProperty('barfoo')
) {
// fancy things happen
}
使用d.hasOwnProperty('bar')
而不只是d.bar
的原因是为了防止某些东西污染了对象原型。
https://stackoverflow.com/questions/15650997
复制相似问题