我正在使用mongodb和ajax调用来检索数据。当它转向javascript对象时,我用来生成html的属性有时不存在。 看看这个电话:在N级调用对象属性javascript
$.ajax({
url: 'api/v1/mention/'+id,
type: "GET",
dataType: "json",
data : {login : "demo"},
success: function(mention) {
display_mention_text(mention.texto);
}
});
在这种情况下我打电话mention.texto,但可以mention.picture或任何属性。有时它是未定义的,并使应用程序崩溃。
该方法从一个对象中调用一个属性,如果它未定义,则返回一个空字符串。 为调用此方法的一些例子(第一个是一个对象,其他都属性):
get_property(mention,"text")
get_property(mention,"user","name")
get_property(mention,"picture")
的方法被定义如下:
function get_property(obj){
var args = Array.prototype.slice.call(arguments),
obj = args.shift();
if (checkNested(obj,args)) {
//what should I do here?
} else{
//the property is undefined and returns ""
"";
};
}
//check if a object has N levels of propertys
function checkNested(obj /*, level1, level2, ... levelN*/) {
var args = Array.prototype.slice.call(arguments),
obj = args.shift();
for (var i = 0; i < args.length; i++) {
if (!obj.hasOwnProperty(args[i])) {
return false;
}
obj = obj[args[i]];
}
return true;
}
在第一种方法get_property,如果财产确实存在,我该怎么称呼? 我有对象,他propertys作为数组一样: 对象
params = ["user","name"]
,但我不能像以下称:
object.["user","name"]
将'get_property'函数中的'if'语句替换为'checkNested'函数的'for'循环。然后,不要返回“true”或“false”,而是返回找到的值或'“”'。 –
但函数checkNested返回true或false,而不是值。 –
我发布了[一个答案](http://stackoverflow.com/a/13345966/1689607),我做了解释。但是,再次,*替换整个if语句,并将其他函数中的'for'语句置于其位置。然后*改变*返回值,所以你不再返回'true'或'false'。 –