私はこれが型強制変換問題の詳細だと思います。したがって、オブジェクトと非オブジェクトが処理される規則と順序を理解する必要があります。あなたの場合、あなたは、あなたがオブジェクトの値をラップさせる新しいキーワードを使用して
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
それは原始的な対ちょうどオブジェクトの。 'new'は一意のオブジェクトを生成します。 [オブジェクトとプリミティブ型平等]の –
可能な重複(https://stackoverflow.com/questions/21488340/object-and-primitive-type-equality) –
https://stackoverflow.com/questions/11704971/why-are - 2つの同一オブジェクト - 互いに等しくない - –