很多時候,我們需要判斷對象的屬性是否存在,以便進行下一步的操作
而對象的屬性又有一定的依賴關系,比如
user.hourse.dog
if(user) {
if(user.house) {
if(user.houre.dog) {
//如果層級很深的話,就惡心了
}
}
}
如果單純的把條件換為user.house.dog,就完美了,開始動手
function isKeyExists(path, object) {
//在browser或者nodejs下,都能安全取得全局對象
var global = (function() {
return this;
}());
//將傳入的對象路徑字符串拆分為數組
var pathList = path.split('.');
var obj = null;
//從全局對象中取出名字為 數組[0]的對象
var globalObj = global[pathList.shift()];
//如果指定了對象,就從對象中查找,如果沒有就使用全局環境
obj = object || globalObj;
if(!obj) {
return false;
}
for(var i=0; key=pathList[i]; i++) {
if(!obj[key]) {
return false;
}
obj = obj[key];
}
return true;
}
var user = {
house: {
dog: 'somedog'
}
};
//在瀏覽器和nodejs中都能正確判斷
if(isKeyExists('user.house.dog', user)) {
console.log('hello dog');
} else {
console.log('nothing');
}
