JavaScript:检查对象是否没有属性或映射/关联数组是否为空

41

可能是重复问题:
如何从JSON中测试空的Javascript对象?

在JavaScript中有没有一种简单的方法来检查一个对象是否没有属性,或者换句话说,检查一个Map/关联数组是否为空?例如,假设您有以下内容:

var nothingHere = {};
var somethingHere = {foo: "bar"};

有没有一种简单的方法来判断哪一个是“空的”?我唯一能想到的就是像这样:

function isEmpty(map) {
   var empty = true;

   for(var key in map) {
      empty = false;
      break;
   }

   return empty;
}

有没有更好的方法(比如本地属性/函数或其他什么)?


Dupe - https://dev59.com/QXVD5IYBdhLWcg3wWaVh - Joel Etherton
@Daniel - 感谢你提供那个问题的链接。我在SO上尝试搜索,但没有找到任何东西。版主们,请关闭这个问题。谢谢! - Vivin Paliath
我会选择chryss的解决方案,而不是你的,因为它使用了hasOwnProperty调用。如果有任何东西扩展了Object原型(许多库都这样做),你的方法将不再返回正确的结果,因为它会读取继承的属性。 - Cristian Sanchez
@Daniel,是的,我也喜欢它。原型似乎会以那种方式污染命名空间。 - Vivin Paliath
1个回答

51

试一试这个:

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

您的解决方案也有效,但前提是没有扩展Object原型的库存在。这种方法可能足够好,也可能不足够。


这里的hasOwnProperty调用非常重要,如果有任何库在操纵Object原型,就需要用到它。+1 - Cristian Sanchez
谢谢。我在解决方案中加了注释——我已经采用hasOwnPrototype调用一段时间了,甚至不再考虑它。 - chryss
1
你甚至不再考虑它,实际上你称之为hasOwnPrototype。笑 - Zo72

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接