如何在javascript中检查isEmpty

时间:2014-02-12 08:28:51

标签: javascript jquery is-empty

我想检查response.data.totalRows是否为空。

if (response!=undefined
   && response.data!=undefined
   && response.data.totalRows!=undefined) {

  alert(response.data.totalRows);
}

可以简化代码吗?

更新:似乎没有像isEmpty(response.data.totalRows)这样简单的方法。

6 个答案:

答案 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)response0null等,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