JavaScriptの==演算子と===演算子の違いを徹底解説
JavaScriptでは、2つの値(オペランド)を比較する際に「==(ダブルイコール)」と「===(トリプルイコール)」という2種類の等価演算子を使用できます。一見よく似ていますが、この2つには重要な違いがあり、使い分けを誤ると予期しないバグの原因になります。
==と===の主な違い
| 番号 | 項目 | ==(ダブルイコール) | ===(トリプルイコール) |
|---|---|---|---|
| 1 | 名称 | ==は等価演算子(Equality Operator)と呼ばれます。 | ===は同一性演算子/厳密等価演算子(Identity / Strict Equality Operator)と呼ばれます。 |
| 2 | 比較方法 | 比較の前に型変換(型強制)を行います。 | 型変換を一切行わず、厳密な比較を行います。 |
| 3 | 構文 | 比較の構文は (a == b) の形式です。 | 比較の構文は (a === b) の形式です。 |
| 4 | 実際の動作 | まず両方のオペランドを同じ型に変換してから比較します。つまり、両者の型が揃った時点で比較が実行されます。この挙動は「型強制(Type Coercion)による比較」とも呼ばれます。 | 一方、===は比較前にいかなる型変換も行いません。両方のオペランドの型と値が完全に一致した場合のみtrueを返します。 |
==と===の使用例
Equals.jsp
var a = true; var b = 1; var c = true; console.log(a == b); // 1がbooleanのtrueに変換されてから比較されるためtrue console.log(a === c); // 両方ともboolean型なので変換は不要、そのまま比較してtrue console.log(a === b); // 型変換は行われず、オペランド同士の型が異なるためfalse
出力結果
true true false
使い分けのポイント
上記の例のように、a == bでは数値の1が真偽値のtrueへと暗黙的に変換されるため、直感に反する結果になることがあります。このような予期しない型変換によるバグを防ぐため、現代のJavaScript開発では===(厳密等価演算子)の使用が推奨されています。==を使う場合は、暗黙の型変換の挙動を十分に理解した上で、意図的に活用することが大切です。
-
PHPの「|」(ビットOR)と「||」(論理OR)演算子の違いを徹底解説
「|」ビット単位OR演算子とは「|」はビット単位OR演算子です。数値を2進数のビット列として扱い、対応する各ビットを比較して、どちらか一方でも1であればそのビットを1に設定します。「||」論理OR演算子とは「||」は論理OR演算子で、オペランド全体を一つの値として評価します。if文などの条件分岐で真偽値を判定する際によく使われます。また、「||」には短絡評価(ショートサーキット評価)という特徴があり、左側のオペランドがtrueと評価された場合、右側の式は評価されません。サンプルコード以下の例では、「|」と「||」の動作の違いを実際のコードで確認できます。<!DOCTYPE html>
-
「!==」と「==!」の違いを解説!PHPの比較演算子
PHPには一見よく似ていますが、動作がまったく異なる演算子が存在します。その代表格が「!==」と「==!」です。この記事では、それぞれの演算子の意味と違いを、サンプルコード付きでわかりやすく解説します。 「!==」比較演算子とは 「!==」は「型も含めて等しくない」ことを判定する比較演算子です。値の比較時にデータ型の自動変換(型ジャグリング)を行わず、厳密な型チェックを実施します。そのため、たとえば 1 !== 1 は数値の1と文字列の1というように型が異なるため、true を返します。 「==!」比較演算子とは 実は「==!」という単一の演算子は存在しません。「==!」は「==」と「!」