构建ajax应用程序时,我通常更喜欢以JSON格式获取远程数据。但是,当层次结构不可预测时(specifically geocoding responses from Google Maps API),使用XML格式很有吸引力,因为DOM方法getElementsByTagName将获取层次结构中的数据。假设只有一个元素/属性具有我感兴趣的标记/名称,以下函数是否与getElementsByTagName等效?怎么改进?
function findProperty(obj,prop){
for(var p in obj){
if(p==prop){
return obj[p];
}
if(obj[p] instanceof Object){
var tmp = findProperty(obj[p],prop);
if(tmp){
return tmp;
}
}
}
}
答案 0 :(得分:2)
您的函数看起来像是一个非常直接的线性搜索,许多DOM遍历函数都会这样做。也就是说,您应该添加hasOwnProperty检查以避免从原型树获取属性。 e.g。
for(var p in obj) {
if(obj.hasOwnProperty(p)) {
...
}
}
此外,总是在JS中使用===而不是==(这避免了JS中相当糟糕的类型强制)。我也不确定instanceof语句是否符合你的想法。您可能想要使用:
obj[o].constructor === Object
代替。