今さらながら == と === の挙動の違いをチェック
そもそもコレなんて呼ぶ
PHP、javaScriptで、いつも使っているけど、何て言うのか
覚えていますか?
ネット上とかで毎回見ているけど、意外とスルーしていたりします。
正解は
うーん、会話で使うには長いんですよね。普段は、「イコール1コ抜けてるよ」 とか言っていますね。 (ごめんなさい、そんな状況あんまりなかった)
で、名前のとおり、=== の方が厳しく型をチェックしてくれます。
でも、実際にどんな動きをしているか理解しているのか、と言われたら微妙だということに
気づきました。
挙動チェック
上がjavaScript、下がPHPのコードです。
var str = "1"; var num = 1; console.log( str == num ); // true console.log( str === num ); // false
<?php $str = '1'; $num = 1; var_dump( $str == $num ); // true var_dump( $str === $num ); // false
== は文字列を数値に変換してから比較を行います。 === は型変換を行うことなく評価を行うので、
javaScript、PHPともにfalseが返ってきていますね。この挙動を見ただけでも === を使うことの
意味が実感できると思います。
次に、Boolean(boolean)型を見てみましょう。
オペランドの片方がBooleanならば、その論理オペランドはtrueならば1に、そしてfalseならば0に変換さます。
=== ならば、もちろん厳密にチェックしてくれるのでfalseが返って来ます。
console.log( true == 1 ); // true console.log( true === 1 ); // false console.log( false == 0 ); // true console.log( false === 0 ); // false
<?php var_dump( 1 == true ); // true var_dump( 1 === true ); // false var_dump( 0 == false ); // true var_dump( 0 === false ); // false
javaScriptとPHPの違い
javaScriptの方は、最後の2行に注目していただければわかると思います。
console.log( undefined == null ); // true console.log( undefined === null ); // false console.log( undefined == "" ); // false console.log( undefined === "" ); // false console.log( null == "" ); // false console.log( null === "" ); // false
<?php var_dump( null == '' ); // true var_dump( null === '' ); // false
PHPの方はnullが == で比較した場合、trueになっているんですね。この挙動は最新のPHP7で確認しても
変わっていませんでした。
それでも、 === で比較すれば、ちゃんとfalseが返って来てくれます。
大事なことは、なんでもかんでも === を使わずに == と === を使った場合とで、どういう挙動になるか
考えてプログラムを書くことです。