JavaScript PR

JavaScriptの==と===の違いとは?押さえるべき基礎知識

記事内に商品プロモーションを含む場合があります

記事では、
=====の違いをしっかり理解し、
どのように使い分けるべきかを解説していきます!

JavaScriptでプログラムを書くとき、
=====という2つの比較演算子を使う場面がよくあります。

どちらも値を比較するためのものですが、
それぞれの動作には違いがあります。

この違いを理解することは、バグを防ぎ、
コードの意図を明確にするために非常に重要です。


例えば、0 == '0'trueですが、
0 === '0'falseになります。

これは、==が文字列’0’を数値0に変換してから比較しているためです。
===は型を変換しないため、数値の0と文字列の’0’は異なるものとして扱います。

==は異なる型(数値、文字列、ブーリアンなど)の値を比較するとき、
自動的に型を変換して比較します。

一方、===は型の変換をせず、
値と型の両方が同じ場合にのみ「等しい」と判断します。
この違いを知らないと、意図しない結果を引き起こす可能性があります。

比較演算子とは?

比較演算子は、
2つの値を比較するために使います。

JavaScriptにはいくつかの比較演算子がありますが、
ここでは特に=====に焦点を当てます。

どちらの演算子も、
プログラム内で条件判断を行う際に頻繁に使用されます。

しかし、それぞれの挙動が異なるため、
状況に応じた適切な使い分けが求められます。

==は数値や文字列、
ブーリアンなど異なる型同士の値を比較する際に、
型を自動的に変換して比較します。

例えば、
1 == '1'trueです。
対して、===は型を変換せずに比較するため、
1 === '1'falseになります。

このように、
=====はそれぞれ異なる目的で使われるため、
正しく理解して使い分けることが重要です。

等価演算子(==)とは?

等価演算子==は、
2つの値が等しいかどうかを比較しますが、
型が異なる場合は、比較前に型を自動的に変換します。

==は初心者にとって便利な演算子ですが、
型変換が行われるため、
意図しない結果を引き起こす可能性があります。

例えば、
0 == falsetrueになります。

これは、JavaScriptが
false0に変換してから比較するためです。

また、'0' == 0trueです。
これは、文字列の'0'が数値の0に変換されるためです。

==を使う際は、
型変換が自動的に行われることを
理解しておく必要があります。

厳密等価演算子(===)とは?

厳密等価演算子===は、値だけでなく、
型も一致する場合にのみtrueを返します。
型が異なる場合は、falseになります。

===は型変換を行わないため、
予期しない結果を防ぐことができます。
特に、厳密な比較が必要な場面では===を使うべきです。

0 === falsefalseです。
なぜなら、数値0とブーリアンfalseは異なる型だからです。
また、1 === '1'falseです。
文字列'1'と数値1は異なる型のためです。

===は型変換が行われないため、
予期しない結果を避けることができます。

厳密な比較が求められる場面では===を選択しましょう。

==と===の違いを比較

=====はどちらも値を比較するための演算子ですが、
==は型変換を行い、===は型変換を行いません。

型変換が行われるかどうかで、
比較結果が大きく異なる場合があります。
これを理解することで、バグを防ぐことができます。

以下の例を見てください。

console.log(0 == '0');  // true
console.log(0 === '0'); // false
console.log(null == undefined);  // true
console.log(null === undefined); // false


上記の例では、
==が型変換を行うためtrueを返し、
===が型変換を行わないためfalseを返しています。

このように、
=====は結果が異なる場合があるため、
使用する際には注意が必要です。

Object.is():同値等価性の特殊な場合

Object.is()は、
===とほぼ同じように動作しますが、
いくつかの特殊なケースでは異なる結果を返します。

Object.is()は、+0-0を区別し、
NaNNaNと等しいと判断する点で、
===とは異なります。

例えば、以下のように動作します。

console.log(+0 === -0);  // true
console.log(Object.is(+0, -0)); // false

console.log(NaN === NaN);  // false
console.log(Object.is(NaN, NaN)); // true


これらのケースでは、
Object.is()を使うことで、
より正確な比較が可能です。

==と===の使いどころ

==は簡単に使えますが、
予期せぬ型変換によるバグの原因となることがあるため、
可能な限り===を使用することが推奨されます。

===は型変換を行わないため、
意図した通りの比較結果を得ることができます。
特に、コードの可読性やメンテナンス性を高めるために、
===を使う習慣をつけると良いでしょう。

フォーム入力値の検証や条件分岐など、
厳密に値と型の一致を確認したい場合には===が適しています。

基本的には===を使い、
特別な理由がない限り==は避けるようにしましょう。

注意点:特殊なケースにおける比較

オブジェクトの比較

=====を使用する際には、
nullとundefined、
オブジェクトの比較など特殊なケースに注意が必要です。
※意図しない挙動を引き起こす可能性があるため

console.log(null == undefined);  // true
console.log(null === undefined); // false


また、オブジェクト同士の比較では、
同じ内容でも異なるインスタンスは等しくないと判断されます。

console.log({} == {});  // false
console.log({} === {}); // false


特殊なケースを理解しておくことで、
より安定したコードを書くことができます

switch文での注意点

JavaScriptのswitch文は、
内部的に===を使用して条件を比較します。

したがって、
switch文を使用する際には、
比較対象の型に注意が必要です。

const a = undefined;
switch (a) {
  case null:
    console.log('some');  // 実行されない
    break;
}

このコードでは、aundefinedであり、
nullと比較する際に===が使用されるため、
case null:のブロックは実行されません。

パフォーマンスに関する考察

処理速度の違い
===は型変換を行わないため、
==に比べて処理が速い場合があります。

特に、大量のデータを扱う場合やパフォーマンスが重要な場合は、
===を使用することで効率が向上することがあります。

まとめ:JavaScriptの比較演算子の選び方

=====の違いを理解し、
適切に使い分けることで、
予期しないバグを避け、
読みやすいコードを書くことができます。

特に初心者のうちは、
基本的に===を使用することをお勧めします。
これにより、意図した通りの結果を得やすくなります。

コード全体の一貫性を保つためにも、
厳密等価演算子===の使用を推奨します。
特に、型変換を避けたい場合や、
厳密な比較が必要な場合に役立ちます。

この記事で学んだ内容を日々のコーディングに活かして、
より良いプログラムを作成していきましょう!