→
二つのオペランドが等しいことを検査し、論理値で結果を返します。
厳密等価演算子とは異なり、オペランドの型が異なる場合には型の変換を試みてから比較を行います。
X | オペランド1 |
---|---|
Y | オペランド2 |
等価演算子(== および !=)は、抽象等価比較アルゴリズムを使用して二つのオペランドを比較します。これは、およそ次のようにまとめることができます:
この演算子と厳密等価(===)演算子の最も顕著な違いは、厳密等価演算子が型変換を試みない点です。厳密等価演算は、オペランドの型が異なる場合は常に異なるものと見なします。
型変換がない場合の比較:
D=1 == 1; //=true D="hello" == "hello"; //=true
型変換がある場合の比較:
D="1" == 1; //=true D=1 == "1"; //=true D=0 == false; //=true D=0 == null; //=false D=0 == undefined; //=false D=null == undefined; //=true const number1 = new Number(3); const number2 = new Number(3); D=number1 == 3; //=true D=number1 == number2; //=false
オブジェクトの比較:
const object1 = {"key": "value"}; const object2 = {"key": "value"}; D=object1 == object2 //=false D=object2 == object2 //=true
文字列と String オブジェクトの比較:
new String() を使用して構築された文字列はオブジェクトであることに注意してください。文字列リテラルとの比較を行うと、String オブジェクトは文字列リテラルに変換され、その中身が比較されます。ただし、両方のオペランドが String オブジェクトであった場合は、オブジェクトとして比較され、同じオブジェクトを参照している場合だけ比較に成功します。
const string1 = "hello"; const string2 = String("hello"); const string3 = new String("hello"); const string4 = new String("hello"); D=string1 == string2; //=true D=string1 == string3; //=true D=string2 == string3; //=true D=string3 == string4; //=false D=string4 == string4; //=true
Date と文字列の比較:
const d = new Date('December 17, 1995 03:24:00'); const s = d.toString(); // for example: "Sun Dec 17 1995 03:24:00 GMT-0800 (Pacific Standard Time)" D=d == s; //=true