Check for an empty map
我有一个有趣的问题,我确信很容易解释,但解释却让我难以理解。
javascript中的未定义或空对象等于false。
1 2 3 | var x; alert(!x); //returns true alert(x==true); //returns false |
空数组对象怎么样?这是真是假?
1 2 3 | var x = []; alert (x==true); //returns false alert (!x); //returns false |
号
如果它等于真,我如何检查它是否非空?我本想这么做的
1 2 3 | if (!x) { //do stuff } |
我试过检查
1 2 3 4 | var x = []; alert(x.length); //returns 0 x.prop ="hello"; alert(x.length); //still returns 0 |
。
我如何检查我的地图是否是空的?
这不像看起来那么简单,您必须检查对象是否至少有一个属性。
jquery为此提供了
1 2 3 4 5 6 | function isEmptyObject( obj ) { for ( var name in obj ) { return false; } return true; } |
样品用途:
1 2 3 4 | > var x = []; > x.prop ="hello"; > isEmptyObject(x); false |
号
有点困惑,因为您似乎在混合您的问题中的对象和数组。希望这能帮你把事情弄清楚。
空数组的计算结果为true:
1 | !![] //true |
但整数0的计算结果为false,因此可以执行以下操作:
1 | !![].length //false |
。
所以:
1 2 3 4 5 | if([].length) { //array has 1 element at least } else { //array has 0 elements } |
然而,您似乎确实使数组和对象混淆了。在javascript中,我们有对象:
1 2 3 | var x = {}; x.foo ="bar"; x.baz = 2; |
。
我们有阵列:
1 2 3 | var x = []; x.push("foo"); x.length //1 |
。
你不能像开场白那样做:
1 2 3 | var x = []; //x is an array x.foo ="bar"; //can't do this on an array x.length; // 0 |
如果使用jquery
1 | jQuery.isEmptyObject(obj) |
如果没有,你可以实现你自己的
1 2 3 4 5 6 | isEmptyObject = function(obj) { for (key in obj) { if (obj.hasOwnProperty(key)) return false; } return true; }; |
。
如果您使用的是适当的JS
具体来说,有一个
首先,您使用的是数组而不是映射。映射将是一个对象实例:
1 2 | var x = {}; x.prop ="5"; |
。
您的代码是有效的,因为数组也是对象。您可以检查您的对象是否如此问题中所回答的那样为空。
*如果是空列表,则为真(
*