我发现其他方法有点巨大。那么,以下方法的主要缺点是什么:
// Pass the path as a string, parse it, and try to traverse the chain.
Object.prototype.pathExists = function(path) {
var members = path.split(".");
var currentMember = this;
for (var i = 0; i < members.length; i++) {
// Here we need to take special care of possible method
// calls and arrays, but I am too lazy to write it down.
if (currentMember.hasOwnProperty(members[i])) {
currentMember = currentMember[members[i]];
} else {
return false;
}
}
return true;
}
基本上,我们在对象上定义一个方法(不一定),该方法获取嵌套对象的路径并返回存在确认,例如appData.pathExists("foo.bar.setting");
编辑:检查object[prop] == undefined在语义上不正确,因为即使定义了属性,它也会返回 false,尽管它的值为undefined; 这就是为什么我hasOwnProperty用来检查是否定义了属性。如果只需要获取值,这可能并不重要。