关于对象:如何在javascript中检查此布尔哈希映射是否为空?

How do I check this boolean hashmap is empty in javascript?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicates:
Object comparison in JavaScript
How do I test for an empty Javascript object from JSON?

1
2
var abc = {};
console.log(abc=={}) //false, why?

为什么是假的?如何匹配空白哈希图…?


是一个新的对象实例化。所以ABC!="一个新对象",因为ABC是另一个对象。

此测试工作:

1
2
3
4
5
6
7
8
9
var abc = {};
var abcd = {"no":"I am not empty"}
function isEmpty(obj) {
  for (var o in obj) if (o) return false;
  return true;
}

alert("abc is empty?"+ isEmpty(abc))
alert("abcd is empty?"+ isEmpty(abcd))

更新:刚才看到其他几个人也提出了同样的建议,但是使用了hasownpropy

我无法验证IE8和FX4在我和他们之间的区别,但我希望得到启发。


1
if (abc.toSource() ==="({})")  // then `a` is empty

1
2
3
4
5
6
7
function isEmpty(abc) {
    for(var prop in abc) {
        if(abc.hasOwnProperty(prop))
            return false;
    }
    return true;
}


语句var abc = {};创建一个新的(空)对象,并将变量abc指向该对象。

测试abc == {}创建第二个新(空)对象,并检查abc是否指向同一对象。但事实并非如此,因此false就是这样。

没有内置方法(据我所知)来确定对象是否为空,但您可以编写自己的短函数来这样做:

1
2
3
4
5
6
7
function isObjectEmpty(ob) {
   for (var prop in ob)
      if (ob.hasOwnProperty(prop))
         return false;

   return true;
}

(hasOwnProperty()检查是忽略原型链中的属性,而不是直接在对象中。)

注意:术语"object"是您想要使用的,而不是"hash map"。


1
var abc = {};

这将创建一个对象

因此,您可以尝试以下类型:

1
if (typeof abc =="object")...