3

重複の可能性:
JavaScriptの比較配列

​var x = [""]
if (x === [""]) { alert(​​"True!") }​​ 
else { alert("False!") }

何らかの理由で、これは警告しFalseます。理由がわからないようです。このアラートを作成するにはどうすればよいTrueですか?

4

5 に答える 5

4

2 つのオブジェクトがまったく同じオブジェクトを参照している場合、それらは同等です。あなたの例では、x は 1 つのオブジェクトであり、[""] は別のオブジェクトです。このようにオブジェクトを比較することはできません。このリンクは役に立つかもしれません。

于 2013-01-03T16:58:54.913 に答える
2

配列全体ではなく値を比較する

...それらはオブジェクトであり、ここでは暗黙的な参照を扱っているためです。1 つのオブジェクトが変数に格納されx、インプレースで作成されたオブジェクト (空の文字列要素を持つ配列) と (参照によって) 比較しようとしています。これらは、それぞれ独自の参照を持つ 2 つのオブジェクトであるため、 equal ではありません

配列に任意の数の空の文字列を含める可能性を提供しながら、あなたが求めていることを行うように例を変更しました。

if (x.length && x.join && x.join("") === "")
{
    alert(​​"True!")
}​
else
{
    alert("False!")
}

これはTrueを返します!次のような配列の場合:

var x = [];
var x = [""];
var x = [null];
var x = [undefined];
var x = ["", null, undefined];
...
于 2013-01-03T16:53:53.163 に答える
1

配列は、同じオブジェクトを参照しない限り、この方法で確実に比較することはできません。代わりにこれを行います:

if ( x[0] == "" )

または配列にしたい場合:

if ( x.length && x[0] == "" )
于 2013-01-03T16:54:25.297 に答える
0

JavaScriptでは、2つのオブジェクトは、同じオブジェクトを参照している場合にのみ等しくなります。でも[] == []ですfalse

おそらく遅いが一般的な解決策は、2つのオブジェクトの文字列表現を比較することです。

JSON.stringify(a1) == JSON.stringify(a2)
于 2013-01-03T16:56:20.330 に答える
0

この場合、toString を使用できます。注意してください、これが機能しない外れ値がいくつかあります。

var x = [""]
alert(x.toString() == [""].toString()) // true
于 2013-01-03T16:54:37.373 に答える