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

比較演算子===について間違った認識をしていたのでメモしておく。

オペランドとは

コンピュータプログラミングにおいて、演算の対象となる値や変数のことである。「被演算子」と訳されることもある。
演算内容をあらわす記号などは「演算子」または「オペレータ(operator)」という。例えば「A+10」という式では、「A」と「10」がオペランドで、「+」がオペレータである。

比較演算子==

比較演算子==は、等価比較を行う。それぞれのオペランドが等しいときにtrueを返す。
オペランドは比較前に同じ型に変換される。

== による緩やかな比較

`TRUE``FALSE`10-1“1”“0”“-1″`NULL`array()“php”“”
`TRUE``TRUE``FALSE``TRUE``FALSE``TRUE``TRUE``FALSE``TRUE``FALSE``FALSE``TRUE``FALSE`
`FALSE``FALSE``TRUE``FALSE``TRUE``FALSE``FALSE``TRUE``FALSE``TRUE``TRUE``FALSE``TRUE`
1`TRUE``FALSE``TRUE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE`
0`FALSE``TRUE``FALSE``TRUE``FALSE``FALSE``TRUE``FALSE``TRUE``FALSE``TRUE``TRUE`
-1`TRUE``FALSE``FALSE``FALSE``TRUE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE`
“1”`TRUE``FALSE``TRUE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE`
“0”`FALSE``TRUE``FALSE``TRUE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE`
“-1″`TRUE``FALSE``FALSE``FALSE``TRUE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE`
`NULL``FALSE``TRUE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``TRUE``TRUE``FALSE``TRUE`
array()`FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``TRUE``TRUE``FALSE``FALSE`
“php”`TRUE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``TRUE``FALSE`
“”`FALSE``TRUE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``TRUE``FALSE``FALSE``TRUE`
 

比較演算子===

比較演算子=は、等価および型比較を行う。オペランドが両方とも等しく、型も同じ場合にtrueを返す。比較演算子には暗黙の型変換があるため、一般的には比較を行う際にはこちらの方が安全である。
 
=== による厳密な比較

`TRUE``FALSE`10-1“1”“0”“-1″`NULL`array()“php”“”
`TRUE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE`
`FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE`
1`FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE`
0`FALSE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE`
-1`FALSE``FALSE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE`
“1”`FALSE``FALSE``FALSE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE`
“0”`FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE``FALSE`
“-1″`FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE``FALSE`
`NULL``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``TRUE``FALSE``FALSE``FALSE`
array()`FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``TRUE``FALSE``FALSE`
“php”`FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``TRUE``FALSE`
“”`FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``FALSE``TRUE`
 

まとめ

==では暗黙的な型変換が行われるので、暗黙的な型変換を意図していないコードでは===を使用する。

参考
書籍 オブジェクト指向 JavaScript
PHP: PHP 型の比較表 – Manual
オペランドとは 【 operand 】 – 意味/解説/説明/定義 : IT用語辞典