--- title: 比較演算子 slug: conflicting/Web/JavaScript/Reference/Operators tags: - JavaScript - Operator - Reference - 演算子 translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Comparison_Operators original_slug: Web/JavaScript/Reference/Operators/Comparison_Operators ---
{{jsSidebar("Operators")}}

JavaScript には、厳密な比較と型変換の比較の両方があります。厳密な比較 (例: ===) は、オペランドが同じ型で、内容も一致している場合にのみ真になります。もっとよく使用される抽象的な比較 (例: ==) は、比較する前にオペランドを同じ型に変換します。抽象的な関係比較 (例: <=) では、比較前にまずオペランドがプリミティブ型に変換され、それから同じ型に変換されます。

文字列は Unicode 値を使用した標準的な辞書順に基づいて比較されます。

{{EmbedInteractiveExample("pages/js/expressions-equality.html")}}
{{EmbedInteractiveExample("pages/js/expressions-strict-equality.html")}}

比較の機能は以下のとおりです。

等価演算子

等価 (==)

等価演算子は、2 つのオペランドが同じ型でないならばオペランドを変換して、それから厳密な比較を行います。両方のオペランドがオブジェクトならば、 JavaScript は内部参照を比較するので、オペランドがメモリ内の同じオブジェクトを参照するときに等しくなります。

構文

x == y

1    ==  1         // true
'1'  ==  1         // true
1    == '1'        // true
0    == false      // true
0    == null       // false
var object1 = {'key': 'value'}, object2 = {'key': 'value'};
object1 == object2 // false
0    == undefined  // false
null == undefined  // true

不等価 (!=)

不等価演算子は、オペランド同士が等しくないならば真を返します。2 つのオペランドが同じ型でないならば、JavaScript は適切な型にオペランドを変換して比較しようとします。両方のオペランドがオブジェクトならば、JavaScript は内部参照を比較するので、オペランドがメモリ内の異なるオブジェクトを参照するときには等しくなりません。

構文

x != y

1 !=   2     // true
1 !=  '1'    // false
1 !=  "1"    // false
1 !=  true   // false
0 !=  false  // false

一致 / 厳密等価 (===)

厳密等価演算子は、型変換なしでオペランド同士が (上に示した通り) 厳密に等しければ真を返します。

構文

x === y

3 === 3   // true
3 === '3' // false
var object1 = {'key': 'value'}, object2 = {'key': 'value'};
object1 === object2 //false

不一致 / 厳密不等価 (!==)

厳密不等価演算子は、オペランド同士が等しくないか、型が等しくない、あるいはその両方ならば真を返します。

構文

x !== y

3 !== '3' // true
4 !== 3   // true

関係演算子

これらの演算子のそれぞれは、比較が行われる前に、そのオペランドをプリミティブに{{Glossary("Type_coercion", "型強制")}}します。両方とも文字列として終わる場合は、辞書順で比較され、そうでない場合は数値に変換されて比較されます。 NaN との比較は常に false を生み出します。

大なり演算子 (>)

大なり演算子は、左オペランドが右オペランドより大きければ、真を返します。

構文

x > y

4 > 3 // true

大なりイコール演算子 (>=)

大なりイコール演算子は、左オペランドが右オペランド以上ならば、真を返します。

構文

 x >= y

4 >= 3 // true
3 >= 3 // true

小なり演算子 (<)

小なり演算子は、左オペランドが右オペランドより小さければ、真を返します。

構文

 x < y

3 < 4 // true

小なりイコール演算子 (<=)

小なりイコール演算子は、左オペランドが右オペランド以下ならば、真を返します。

構文

 x <= y

3 <= 4 // true
3 <= 3 // true

等価演算子の使用

標準等価演算子 (==!=) は 2 つのオペランドの比較に抽象的等価比較アルゴリズムを使用します。オペランドの型が異なる場合は、比較を行う前にそれらを同じ型に変換しようとします。例えば 5 == '5' という式では、比較を行う前に右オペランドの文字列を数値に変換します。

厳密等価演算子 (===!==) は厳密等価比較アルゴリズムを使用して、オペランドの型が同一かどうかに関する比較も行います。オペランドの型が異なれば、例えば 5'5' の比較では、同一性比較 5 !== '5'true と評価され、 5 === '5' のチェックは false 評価されます。

厳密等価演算子を使うのは、オペランドが特定の型の特定の値でなければならない場合、言い換えればオペランドの正確な型が重要な場合です。それ以外では、2 つのオペランドが同じ型でなくても比較が可能になる、標準的な等価演算子を使えます。

比較に型の変換が関わるとき (つまり厳密でない比較のとき)、 JavaScript は以下のように {{jsxref("String")}}, {{jsxref("Number")}}, {{jsxref("Boolean")}}, {{jsxref("Object")}} 型のオペランドを変換します。

メモ: String オブジェクトはオブジェクト型であり、文字列型ではありません! String オブジェクトはほとんど使わないので、次の結果に驚くかもしれません。
// 両方のオペランドが文字列型 (すなわちプリミティブな文字列) なので、true
'foo' === 'foo'

var a = new String('foo');
var b = new String('foo');

// a と b はオブジェクト型で、異なるオブジェクトを参照しているので、false
a == b

// a と b はオブジェクト型で、異なるオブジェクトを参照しているので、false
a === b

// a と 'foo' は異なる型で、比較前にオブジェクト (a) は
// 文字列 'foo' に変換されるので、真
a == 'foo'

仕様書

仕様書
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality Operators')}}
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}

ブラウザーの互換性

{{Compat("javascript.operators.comparison")}}

関連情報