5

有没有更好的方法来检查对象是否为空?我正在使用这个:

function isObjEmpty(obj)
{
    for (var p in obj) return false;
    return true;
}
4

3 回答 3

10

如果您正在寻找单线,请考虑Object.keys

var isEmpty = !Object.keys(obj).length;

您当前的方法很危险,因为它Object.prototype在扩展时总是会返回 false:http: //jsfiddle.net/Neppc/

于 2012-05-07T13:36:38.063 回答
2

另一个选项内置在jQuery中:jQuery.isEmptyObject(obj)

编辑:有趣的是,该实现与问题中的代码相同。

于 2012-05-07T14:00:14.123 回答
0

实际上这是检查对象是否为空的好方法!对于 exmpty 对象,它比使用上面建议的 Object.keys() 快 10 倍 :)

在 Node、Chrom、Firefox 和 IE 9 下测试,很明显对于大多数用例:

  • (for...in...) 是最快的选择!
  • Object.keys(obj).length 比空对象慢 10 倍
  • JSON.stringify(obj).length 总是最慢的(并不奇怪)
  • Object.getOwnPropertyNames(obj).length 比 Object.keys(obj).length 花费的时间更长,在某些系统上可能更长。

底线性能明智,使用:

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

或者

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

查看详细的测试结果和测试代码,对象是否为空?

于 2015-12-28T10:47:16.667 回答