检查一张空地图

时间:2012-08-21 14:49:33

标签: javascript

我有一个有趣的问题,我确信这个问题很容易解释,但解释却让我不知所措。

javascript中的undefined或null对象等于false。

var x;
alert(!x); //returns true
alert(x==true); //returns false

空数组对象怎么样?这相当于真还是假?

var x = [];
alert (x==true); //returns false
alert (!x); //returns false

如果它等于true,我如何检查它是否为空?我希望能做到

if (!x) {
    //do stuff
}

我尝试检查x.length,但我正在使用此对象作为地图:

var x = [];
alert(x.length); //returns 0
x.prop = "hello"; 
alert(x.length); //still returns 0

如何检查我的地图是否为空?

6 个答案:

答案 0 :(得分:13)

它不像看起来那么容易,你必须检查对象是否至少有一个属性。

jQuery为此目的提供了isEmptyObject

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

样本用法:

> var x = [];
> x.prop = "hello"; 
> isEmptyObject(x);
false

答案 1 :(得分:6)

有点困惑,因为你似乎在你的问题中混合对象和数组。希望这可能有助于为您清理它。

空数组的计算结果为true:

!![] //true

但是整数0的计算结果为false,所以你可以这样做:

!![].length //false

所以:

if([].length) {
   //array has 1 element at least
} else {
  //array has 0 elements
}

但是你似乎确实让数组和对象混淆了。在JavaScript中,我们有对象:

var x = {};
x.foo = "bar";
x.baz = 2;

我们有阵列:

var x = [];
x.push("foo");
x.length //1

你不能在揭幕战中做你做的事情:

var x = []; //x is an array
x.foo = "bar"; //can't do this on an array
x.length; // 0 

答案 2 :(得分:4)

如果您使用的是JQuery

jQuery.isEmptyObject(obj)

如果没有,你可以实现自己的

isEmptyObject = function(obj) {
for (key in obj) {
    if (obj.hasOwnProperty(key)) return false;
}
return true;
};

答案 3 :(得分:2)

首先,您使用的是数组而不是地图。地图将是一个Object实例:

var x = {};
x.prop = "5";

您的代码有效,因为Arrays也是对象。您可以根据this question中的回答检查您的对象是否为空。

答案 4 :(得分:1)

如果您使用的是Proper JS Map<K, V>对象,则可以在Mozilla Docs上使用Map API。

具体来说,有一个Map.prototype.size属性,以及Map.prototype.entries()方法,我相信它会返回一个数组[]的键。如果是length 0,则地图为空。

答案 5 :(得分:0)

*如果空列表为真(if (array1))。

* x.prop并没有真正向数组中添加任何元素,它只是赋值&#34;你好&#34;到数组的属性x但数组仍为空。所以你仍然应该使用.length检查数组是否为空。