假设我们有这个 JavaScript 对象:
var object = {
innerObject:{
deepObject:{
value:'Here am I'
}
}
};
我们如何检查是否value
财产存在吗?
我只能看到两种方法:
第一:
if(object && object.innerObject && object.innerObject.deepObject && object.innerObject.deepObject.value) {
console.log('We found it!');
}
第二个:
if(object.hasOwnProperty('innerObject') && object.innerObject.hasOwnProperty('deepObject') && object.innerObject.deepObject.hasOwnProperty('value')) {
console.log('We found it too!');
}
但有没有办法进行深度检查呢?比如说:
object['innerObject.deepObject.value']
or
object.hasOwnProperty('innerObject.deepObject.value')
这种检查没有内置方法,但您可以轻松实现。创建一个函数,传递一个表示属性路径的字符串,将路径分割为.
,并迭代此路径:
Object.prototype.hasOwnNestedProperty = function(propertyPath) {
if (!propertyPath)
return false;
var properties = propertyPath.split('.');
var obj = this;
for (var i = 0; i < properties.length; i++) {
var prop = properties[i];
if (!obj || !obj.hasOwnProperty(prop)) {
return false;
} else {
obj = obj[prop];
}
}
return true;
};
// Usage:
var obj = {
innerObject: {
deepObject: {
value: 'Here am I'
}
}
}
console.log(obj.hasOwnNestedProperty('innerObject.deepObject.value'));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)