2017-08-01 2 views
2

なぜfalseを返すのですか?関数のコンストラクタを使用してオブジェクトを作成するときにjavascript double equalを比較すると、

double equalは値のみを比較するため、trueを返す必要があります。または、参照(アドレス値)を比較していますか?以下のように

var a = new Number(3); 
var b =new Number(3); 

a == b ; // false 
a === b ; // false 

はtrueを返します:あなたがそのような数字を作成すると

var a = new Number(3); 
var b = 3; 

a == b ; // true 
a === b; // false 
+2

それは原始的な対ちょうどオブジェクトの。 'new'は一意のオブジェクトを生成します。 [オブジェクトとプリミティブ型平等]の –

+0

可能な重複(https://stackoverflow.com/questions/21488340/object-and-primitive-type-equality) –

+0

https://stackoverflow.com/questions/11704971/why-are - 2つの同一オブジェクト - 互いに等しくない - –

答えて

0

を(期待通りになる):

var a = new Number(3); 
var b =new Number(3); 

あなたはユニークなオブジェクトを作成しています。あなたのコンソール

typeof(a) 

にこれを入力した場合 あなたは、応答として

"object" 

が表示されます。同じことがb変数にも当てはまります。 したがって、互いに同じではありません。

これを行うとき:

var x = 1; var y = 2; ;

typeof xとyを確認すると、応答として"number"が表示されます。ここで

は、私はそれがすべて今理にかなって願っていますNumber in Javascript

のためのいくつかの余分な読書です。

1

私はこれが型強制変換問題の詳細だと思います。したがって、オブジェクトと非オブジェクトが処理される規則と順序を理解する必要があります。あなたの場合、あなたは、あなたがオブジェクトの値をラップさせる新しいキーワードを使用して

var a = new Number(3); 
var b =new Number(3); 

a == b ; // false 
a === b ; // false 

var aおよびvar bは、2つの新しい/異なるオブジェクトです。 Javascriptのオブジェクトはユニークです。したがって=====は、同じオブジェクトの同じインスタンスを比較する場合にのみTrueになります。 (したがってそのオブジェクトへの参照)。これが機能すること

理由:

var a = new Number(3); 
var b = 3; 

a == b ; // true 
a === b; // false 

があるため暗黙の型強制を支配するルールである:

(X)のいずれかである文字列または数とタイプ(Y)入力した場合戻り値 を返します。x == ToPrimitive(y)。

Type(x)がObject で、Type(y)がStringまたはNumberの場合は、 の比較ToPrimitive(x)== yの結果を返します。

したがってvar aは、最初にプリミティブ値に変換されてから比較され、真の値になります。深さの説明のために

https://github.com/getify/You-Dont-Know-JS/blob/master/types%20&%20grammar/ch4.md

関連する問題