我有一个有趣的问题,我确信这个问题很容易解释,但解释却让我不知所措。
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
如何检查我的地图是否为空?
答案 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
检查数组是否为空。