我有一个json响应如下:
response:{
attempts: 0,
created_at: "2015-03-03 20:05:50",
created_by: null,
deleted_at: null,
display_name: null,
}
在JavaScript中,我按如下方式检查了它:
if(data.response.display_name!=null){
return toTitleCase(data.response.display_name);
}
根据上面的代码,display_name
永远不会传递给toTitleCase
。但是,上述条件被验证为false,因此将null对象传递给函数。环顾四周,我发现了这个:https://stackoverflow.com/a/26330848/1411975
但是,尝试将其作为
if(data.response.display_name!='null'){
return toTitleCase(data.response.display_name);
}
也给了我错误。如何检查值是否为空?我无法控制传入的数据,所以我无法将其更改为未定义。
编辑:我错过的任何额外信息。
response
对象是正确的。 data.response
attempts: 0
created_at: "2015-03-03 20:05:50"
created_by: null
deleted_at: null
display_name: null
data.response.display_name
null
使用第二种方法时出错:
TypeError: Cannot read property 'replace' of null
由于toTitleCase
已实施replace()
方法。
EDIT [2]:
function returnUsername(data){
if(data.response.display_name !="" || data.response.display_name!=null){
return toTitleCase(data.response.display_name);
}else{
return toTitleCase(data.response.username);
}
}
function toTitleCase(str){
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
完整追踪:
TypeError: Cannot read property 'replace' of null
at toTitleCase (app.js:850)
at returnUsername (app.js:842)
at app.js:498
at angular.js:8148
at l.promise.then.J (angular.js:11659)
at l.promise.then.J (angular.js:11659)
at angular.js:11745
at h.$get.h.$eval (angular.js:12788)
at h.$get.h.$digest (angular.js:12600)
at h.$get.h.$apply (angular.js:12892)