重複の可能性:
JavaScriptの比較配列
var x = [""]
if (x === [""]) { alert("True!") }
else { alert("False!") }
何らかの理由で、これは警告しFalse
ます。理由がわからないようです。このアラートを作成するにはどうすればよいTrue
ですか?
重複の可能性:
JavaScriptの比較配列
var x = [""]
if (x === [""]) { alert("True!") }
else { alert("False!") }
何らかの理由で、これは警告しFalse
ます。理由がわからないようです。このアラートを作成するにはどうすればよいTrue
ですか?
2 つのオブジェクトがまったく同じオブジェクトを参照している場合、それらは同等です。あなたの例では、x は 1 つのオブジェクトであり、[""] は別のオブジェクトです。このようにオブジェクトを比較することはできません。このリンクは役に立つかもしれません。
...それらはオブジェクトであり、ここでは暗黙的な参照を扱っているためです。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];
...
配列は、同じオブジェクトを参照しない限り、この方法で確実に比較することはできません。代わりにこれを行います:
if ( x[0] == "" )
または配列にしたい場合:
if ( x.length && x[0] == "" )
JavaScriptでは、2つのオブジェクトは、同じオブジェクトを参照している場合にのみ等しくなります。でも[] == []
ですfalse
。
おそらく遅いが一般的な解決策は、2つのオブジェクトの文字列表現を比較することです。
JSON.stringify(a1) == JSON.stringify(a2)
この場合、toString を使用できます。注意してください、これが機能しない外れ値がいくつかあります。
var x = [""]
alert(x.toString() == [""].toString()) // true