在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:

var a = {};

我该如何检查是否是这种情况?


当前回答

function isEmpty(obj) {
  for(var i in obj) { return false; }
  return true;
}

其他回答

我在用这个。

function isObjectEmpty(object) {
  var isEmpty = true;
  for (keys in object) {
     isEmpty = false;
     break; // exiting since we found that the object is not empty
  }
  return isEmpty;
}

Eg:

var myObject = {}; // Object is empty
var isEmpty  = isObjectEmpty(myObject); // will return true;
 
// populating the object
myObject = {"name":"John Smith","Address":"Kochi, Kerala"}; 
 
// check if the object is empty
isEmpty  = isObjectEmpty(myObject); // will return false;

从这里开始

使现代化

OR

可以使用isEmptyObject的jQuery实现

function isEmptyObject(obj) {
  var name;
  for (name in obj) {
    return false;
  }
  return true;
}

对于有相同问题但使用jQuery的人,可以使用jQuery.isEmptyObject。

另一种选择是使用is.js(14kB),而不是jquery(32kB)、lodash(50kB)或下划线(16.4kB)。is.js被证明是上述库中最快的库,可以用来确定对象是否为空。

http://jsperf.com/check-empty-object-using-libraries

显然,所有这些库都不完全相同,因此如果您需要轻松地操作DOM,那么jquery可能仍然是一个不错的选择,或者如果您需要的不仅仅是类型检查,那么lodash或下划线可能是不错的选择。对于is.js,语法如下:

var a = {};
is.empty(a); // true
is.empty({"hello": "world"}) // false

与下划线和lodash的_.isObject()一样,这不仅适用于对象,也适用于数组和字符串。

该库使用的是Object.getOwnPropertyNames,它类似于Object.keys,但Object.getownPropertyName更彻底,因为它将返回此处描述的可枚举和非可枚举财产。

is.empty = function(value) {
    if(is.object(value)){
        var num = Object.getOwnPropertyNames(value).length;
        if(num === 0 || (num === 1 && is.array(value)) || (num === 2 && is.arguments(value))){
            return true;
        }
        return false;
    } else {
        return value === '';
    }
};

如果您不想引入库(这是可以理解的),并且知道您只检查对象(而不是数组或字符串),那么下面的函数应该适合您的需要。

function isEmptyObject( obj ) {
    return Object.getOwnPropertyNames(obj).length === 0;
}

这只比is.js快一点,只是因为你没有检查它是否是一个对象。

我为AJAX调用返回了一个空的JSON响应,在IE8中jQuery.isEmptyObject()没有正确验证。我加了一张额外的支票,似乎能正确地抓住它。

.done(function(data)
{  
    // Parse json response object
    var response = jQuery.parseJSON(data);

    // In IE 8 isEmptyObject doesn't catch the empty response, so adding additional undefined check
    if(jQuery.isEmptyObject(response) || response.length === 0)
    {
        //empty
    }
    else
    {
        //not empty
    }
});

从jQuery 1.4开始,isEmptyObject()方法检查对象本身的财产和从原型继承的财产(因为它不使用hasOwnProperty)。参数应该始终是一个普通的JavaScript对象,因为其他类型的对象(DOM元素、原始字符串/数字、宿主对象)可能不会在浏览器中提供一致的结果。要确定对象是否为纯JavaScript对象,请使用$.isPlainObject()。

jQuery.isPlainObject({}) // true

jQuery.isPlainObject( "test" ) // false

Jquery api