15

簡単に説明できると確信している興味深い問題がありますが、説明がわかりません。

JavaScript の未定義または null オブジェクトは false と同じです。

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

空の配列オブジェクトはどうですか? それは true または 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

マップが空かどうかを確認するにはどうすればよいですか?

4

6 に答える 6

14

見た目ほど簡単ではありません。オブジェクトに少なくとも1つのプロパティがあることを確認する必要があります。

jQueryはisEmptyObjectその目的のために提供します:

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

使用例:

> var x = [];
> x.prop = "hello"; 
> isEmptyObject(x);
false
于 2012-08-21T14:52:24.080 に答える
7

質問でオブジェクトと配列を混合しているように見えるので、少し混乱しています。うまくいけば、これはあなたのためにそれをクリアするのに役立つかもしれません。

空の配列は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 
于 2012-08-21T14:52:38.093 に答える
4

JQueryを使用している場合

jQuery.isEmptyObject(obj)

そうでない場合は、独自に実装できます

isEmptyObject = function(obj) {
for (key in obj) {
    if (obj.hasOwnProperty(key)) return false;
}
return true;
};
于 2013-12-10T12:27:45.300 に答える
2

まず、マップではなく配列を使用しています。マップはオブジェクトインスタンスになります。

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

配列もオブジェクトであるため、コードは有効です。この質問で答えられたように、オブジェクトが空であるかどうかを確認できます。

于 2012-08-21T15:12:32.800 に答える
0

*空のリストの場合は true ( if (array1)) になります。

*x.prop実際には配列に要素を追加しません。配列のプロパティ x に値「hello」を割り当てるだけですが、配列はまだ空です。したがって、.length配列が空であることを確認するために引き続き使用する必要があります。

于 2015-11-26T20:16:12.533 に答える