有没有比使用___ in object
检查对象的每个级别的存在来检查单个成员的存在更简单的方法?
更简洁:如何检查someObject.member.member.member.value 是否存在?
有没有比使用___ in object
检查对象的每个级别的存在来检查单个成员的存在更简单的方法?
更简洁:如何检查someObject.member.member.member.value 是否存在?
通常,您可以使用if(property in object)
,但这对于嵌套成员来说仍然很麻烦。
你可以写一个函数:
function test(obj, prop) {
var parts = prop.split('.');
for(var i = 0, l = parts.length; i < l; i++) {
var part = parts[i];
if(obj !== null && typeof obj === "object" && part in obj) {
obj = obj[part];
}
else {
return false;
}
}
return true;
}
test(someObject, 'member.member.member.value');
您也可以尝试/捕获 TypeError?
try {
console.log(someObject.member.member.member.value);
} catch(e) {
if (e instanceof TypeError) {
console.log("Couldn't access someObject.member.member.member.value");
console.log(someObject);
}
}
这是一种方法:http : //jsfiddle.net/9McHq/
var result = ((((someObject || {}).member || {}).member || {}).member || {}).value;
alert( result );
if (someObject.member && someObject.member.member &&
someObject.member.member.member && someObject.member.member.member.value) ...
或类似:
var val = foo.bar && foo.bar.jim && foo.bar.jim.jam && foo.bar.jim.jam.value;
如果任何特定值碰巧是null
、false
、0
或""
(空字符串),这将不会“工作” ,但除了最终值可能是例外,这似乎不太可能。
另请注意,这typeof ____ !== "undefined"
不是查看对象是否具有属性的正确测试。相反,您应该使用___ in object
,例如if ("member" in someObject)
。这是因为您可以将属性设置为 的显式值undefined
,这与使用 删除它不同delete someObject.member
。