等価 (==)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
等価演算子 (==
) は、二つのオペランドが等しいことを検査し、論理値で結果を返します。厳密等価演算子とは異なり、オペランドの型が異なる場合には型の変換を試みてから比較を行います。
試してみましょう
console.log(1 == 1); // Expected output: true console.log("hello" == "hello"); // Expected output: true console.log("1" == 1); // Expected output: true console.log(0 == false); // Expected output: true
構文
x == y;
解説
等価演算子 (==
および !=
) は、抽象等価比較アルゴリズムを使用して 2 つのオペランドを比較します。これは、およそ次のようにまとめることができます。
両方のオペランドがオブジェクトである場合、同じオブジェクトを指している場合に限り
true
を返します。一方のオペランドが
null
で、もう一方がundefined
であった場合はtrue
を返します。オペランドの型が異なる場合は、比較前に同じ型に変換を試みます。
- 数値と文字列を比較する場合、文字列を数値に変換しようとします。
- 一方のオペランドが論理値である場合、その論理値のオペランドが
true
である場合は 1 に、false
である場合は +0 に変換します。 - オペランドのうちの一方がオブジェクトで、もう一方が数値または文字列である場合は、そのオブジェクトの
valueOf()
およびtoString()
メソッドを使用してプリミティブに変換を試みます。
オペランドが同じ型である場合は、次のよう比較します。
- 文字列型: 両方のオペランドが同じ文字を同じ順序で持っている場合のみ、
true
を返します。 - 数値型: 両方のオペランドが同じ値を持っている場合のみ、
true
を返します。+0
と-0
は同じ値と見なされます。一方のオペランドがNaN
である場合はfalse
を返します。 - 論理型: 両方のオペランドが共に
true
であるか、共にfalse
である場合のみtrue
になります。
- 文字列型: 両方のオペランドが同じ文字を同じ順序で持っている場合のみ、
この演算子と厳密等価 (===
) 演算子の最も顕著な違いは、厳密等価演算子が型変換を試みない点です。厳密等価演算は、オペランドの型が異なる場合は常に異なるものと見なします。
例
型変換がない場合の比較
1 == 1; // true "hello" == "hello"; // true
型変換がある場合の比較
"1" == 1; // true 1 == "1"; // true 0 == false; // true 0 == null; // false 0 == undefined; // false 0 == !!null; // true (論理 NOT 演算子を参照) 0 == !!undefined; // true (論理 NOT 演算子を参照) null == undefined; // true const number1 = new Number(3); const number2 = new Number(3); number1 == 3; // true number1 == number2; // false
オブジェクトの比較
const object1 = { key: "value" }; const object2 = { key: "value" }; object1 == object2; // false 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"); console.log(string1 == string2); // true console.log(string1 == string3); // true console.log(string2 == string3); // true console.log(string3 == string4); // false console.log(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)" console.log(d == s); //true
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification # sec-equality-operators |