2013-07-10 21 views
5

これらのJavaScript配列の不等式の比較が本当に評価される理由を誰もが説明できますか?配列の等価/不等号

[""] !== [""] 

[1] !== [1] 

[] !== [] 


[""] != [""] 

[1] != [1] 

[] != [] 
+2

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators –

+0

@GeorgeCumminsこれはほとんどの言語で同じです。 –

+1

myHouseとyourHouseはどちらもハウスですがmyHouse!== yourHouse - > true – Xotic750

答えて

8

===厳しい平等です。
オブジェクトを比較する場合、両側が同じオブジェクトを参照する場合にのみtrueを返します。

[][]は2つの異なるオブジェクトですが、falseを返します。


==は緩やかな平等です。

specで説明されているように、両方のオペランドを同じタイプに強制しようとします。

ただし、オブジェクトも参照IDで比較します。

+0

文字列リテラルを比較するとtrue( "a" === "a")が得られますが、Stringオブジェクトを比較するとfalseが返されることに注意してください。 ")===新しい文字列(" a ")。したがって、文字列リテラルはオブジェクトとして扱われず、Java言語と同様の方法で「保留」されると結論づけています。 –

+1

@normc:いいえ.JavaScriptとは異なり、Javascriptには数字のような_primitive_タイプの文字列があります。 'new String(" a ")'はオブジェクトにそれを囲みます。たとえば、 'var a =" a "; a.b = 2;警告(a.b); // undefined' – SLaks

+0

@normc:ボックス化された文字列オブジェクトはほとんど使用されません。すべての文字列演算はプリミティブを返します。 – SLaks