我想检查response.data.totalRows
是否为空。
if (response!=undefined
&& response.data!=undefined
&& response.data.totalRows!=undefined) {
alert(response.data.totalRows);
}
可以简化代码吗?
更新:似乎没有像isEmpty(response.data.totalRows)
这样简单的方法。
答案 0 :(得分:3)
是的,你可以这样做:
if (response && response.data && response.data.totalRows) {
alert(response.data.totalRows);
}
在JavaScript中,当在truthy
中使用时,对象会转换为if
值。这意味着您可以将变量“转储”在if
或任何其他布尔语句中,以检查它是否存在。 this blog post有更多相关信息。
请注意,如果totalRows
等于0
(因为0
被视为falsy
值,则不会提醒任何内容。)如果您如果它是0
,也想提醒,请使用:
if (response && response.data &&
(response.data.totalRows || response.data.totalRows === 0)) {
alert(response.data.totalRows);
}
或者:
if (response && response.data && response.data.totalRows !== undefined) {
alert(response.data.totalRows);
}
答案 1 :(得分:1)
我会写一个原型(即使不推荐)
Object.prototype.isEmpty = function(){
return (!this || this===undefined || this===null || !this.hasChildNodes())
?true
:false;
}
然后使用
if(!response.isEmpty()) alert(response.data.totalRows);
如果您需要在其他地方进行检查而不仅仅是一个地方,这只是方便。
答案 2 :(得分:1)
假设response.data.totalRows
必须是一个只能使用的数组:
if (!response.data.totalRows.length) {
/* empty array */
}
如果您不确定totalRows
是否存在,则必须验证:
if (
!response ||
!response.data ||
!response.data.totalRows ||
!response.data.totalRows.length
) {
/* is empty */
}
任何值都会在Boolean
中转换。例如:如果Boolean(response)
为response
,0
,null
等,undefined
将返回false。
答案 3 :(得分:1)
try-catch块怎么样?
try{ alert(response.data.totalRows); }
catch(e) { alert("undefined"); }
答案 4 :(得分:0)
只需
response && response.data && response.data.totalRows && alert(response.data.totalRows)
答案 5 :(得分:0)
如果属性列表变得很长,则可以使用另一种语法,在示例代码中我创建了一个函数,以便可以重复使用。
// args is { object: the object to check the properties of
// properties: an array of strings with property names}
function isSet(args){
//no checking of arguments
var o = args.object,
props = args.properties,
i = -1,len = props.length
while(typeof o !== "undefined"
&& o !== null
&& ++i<len){
o = o[props[i]];
}
return (typeof o !== "undefined"
&& o !== null)?true:false;
}
var test = {
prop1 : {
prop2 : "ok"
}
};
//check if test.prop1.prop2 is set
console.log(isSet({
object:test,
properties: ["prop1","prop2"]
}));//=true