PHP、JavaScriptにおける演算子==と===

よこのじ(@yokonoji_work)です。

PHP、JavaScriptをやっていると条件式の中で if (a === b) のような記述を見ることがあるかと思います。等しいことを確認する==とは挙動が異なりますので、情報整理しておきます。

比較演算子==と===の違い

PHP

PHPのドキュメントを見てみますと、型の違いまで同じかどうか確認している点に違いがあります。

$a == $b等しい型の相互変換をした後で $a が $b に等しい時に TRUE
$a === $b等しい$a が $b に等しく、および同じ型である場合に TRUE 。
$a != $b等しくない型の相互変換をした後で $a が $b に等しくない場合に TRUE
$a !== $b等しくない$a が $b と等しくないか、同じ型でない場合に TRUE 。

PHP言語リファレンス 比較演算子

実際に数値と文字列で比較してみると、==ではtrueとなり、===ではfalseとなっています。より厳密な比較が必要な場合には===を使う必要がありそうです。

php結果

JavaScript

JavaScriptについても、型の違いを確認しているかどうかの違いがあります。

標準的な等価演算子 (== と !=) は 2 つのオペランドの比較に Abstract Equality Comparison Algorithm を使用します。オペランドの型が異なる場合は、比較を行う前にそれらを同じ型に変換しようとします。

厳密等価演算子 (=== と !==) は Strict Equality Comparison Algorithm を使用して、同一の型かどうかに関する比較も行います

MDN web docs 比較演算子

JavaScriptにおいても数値と文字列で比較すると、==ではtrueとなり、===ではfalseとなっています。

js結果

Rubyの===

Rubyの場合、数値123と文字列”123″を==で比較した場合でもfalseとなるため、比較する際に==と===を使い分けることはありません。Rubyにおける===はPHPやJavaScriptとは使い方が異なり、case文での比較に用いられます。

ruby結果