Другим способом решения этой проблемы является, например, наличие следующего объекта:
var x = {
a: {
b: 3
}
};
затем я добавил следующую функцию к этому объекту:
x.getKey = function(k){
var r ;
try {
r = eval('typeof this.'+k+' !== "undefined"');
}catch(e){
r = false;
}
if(r !== false){
return eval('this.'+k);
}else{
console.error('Missing key: \''+k+'\'');
return '';
}
};
тогда вы можете проверить:
x.getKey('a.b');
Если значение не определено, функция возвращает "" (пустую строку), иначе возвращает существующее значение.
Пожалуйста, рассмотрите также другое более сложное решение, проверяющее ссылку: Объект JS имеет глубокую проверку свойства
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'
}
}
}
obj.hasOwnNestedProperty('innerObject.deepObject.value');
P.S .: Существует также рекурсивная версия.