检查一张空地图

cha*_*ama 12 javascript

我有一个有趣的问题,我确信很容易解释,但解释是我的想法.

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

var x;
alert(!x); //returns true
alert(x==true); //returns false
Run Code Online (Sandbox Code Playgroud)

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

var x = [];
alert (x==true); //returns false
alert (!x); //returns false
Run Code Online (Sandbox Code Playgroud)

如果它等于true,我该如何检查它是否为空?我本来希望这样做

if (!x) {
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

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

var x = [];
alert(x.length); //returns 0
x.prop = "hello"; 
alert(x.length); //still returns 0
Run Code Online (Sandbox Code Playgroud)

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

Joã*_*lva 13

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

jQuery提供isEmptyObject了这个目的:

function isEmptyObject( obj ) {
    for ( var name in obj ) {
        return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

样品用法:

> var x = [];
> x.prop = "hello"; 
> isEmptyObject(x);
false
Run Code Online (Sandbox Code Playgroud)


Jac*_*lin 7

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

空数组的计算结果为true:

!![] //true
Run Code Online (Sandbox Code Playgroud)

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

!![].length //false
Run Code Online (Sandbox Code Playgroud)

所以:

if([].length) {
   //array has 1 element at least
} else {
  //array has 0 elements
}
Run Code Online (Sandbox Code Playgroud)

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

var x = {};
x.foo = "bar";
x.baz = 2;
Run Code Online (Sandbox Code Playgroud)

我们有阵列:

var x = [];
x.push("foo");
x.length //1
Run Code Online (Sandbox Code Playgroud)

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

var x = []; //x is an array
x.foo = "bar"; //can't do this on an array
x.length; // 0 
Run Code Online (Sandbox Code Playgroud)