一尘不染

如何测试一个空的 JavaScript 对象?

javascript

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

var a = {};

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


阅读 238

收藏
2022-01-11

共2个答案

一尘不染

ECMA 5+:

// because Object.keys(new Date()).length === 0;
// we have to do some additional check
obj // 👈 null and undefined check
&& Object.keys(obj).length === 0
&& Object.getPrototypeOf(obj) === Object.prototype

但是请注意,这会创建一个不必要的数组( 的返回值keys)。

前 ECMA 5:

function isEmpty(obj) {
  for(var prop in obj) {
    if(Object.prototype.hasOwnProperty.call(obj, prop)) {
      return false;
    }
  }

  return JSON.stringify(obj) === JSON.stringify({});
}

jQuery :

jQuery.isEmptyObject({}); // true

lodash:

_.isEmpty({}); // true

下划线:

_.isEmpty({}); // true

Hoek

Hoek.deepEqual({}, {}); // true

ExtJS

Ext.Object.isEmpty({}); // true

AngularJS(版本 1)

angular.equals({}, {}); // true

Ramda

R.isEmpty({}); // true
2022-01-11
一尘不染

如果ECMAScript 5 支持可用,您可以使用Object.keys():

function isEmpty(obj) {
    return Object.keys(obj).length === 0;
}

对于 ES3 和更早版本,没有简单的方法可以做到这一点。您必须明确地遍历属性:

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return true;
}
2022-01-11