JavaScriptのswitch文による比較は厳密(===)?動作の仕組みを実例で解説
JavaScriptのswitchステートメントが「厳密な比較」を行うのかどうか迷ったことはありませんか?結論から言えば、switch文のcase比較は厳密等価演算子(===)と同じ挙動をします。つまり、値だけでなくデータ型まで一致しなければ、そのcaseはマッチしません。
厳密比較を確認するサンプルコード
混乱を解消するために、まずは以下のコードを実際に実行してみましょう。
例
switch(1) {
case '1':
alert('Switch comparison: Not Strict.');
break;
case 1:
alert('Switch comparison: Strict.');
break;
default:
alert('Default');
}実行結果の解説
このコードを実行すると、「Switch comparison: Strict.」というアラートが表示されます。これは次の理由によるものです。
- switch(1):数値型(number)の
1を渡しています。 - case '1':文字列型(string)の
'1'なので、型が異なるためマッチしません。 - case 1:数値型の
1であり、値も型も一致するため、ここが実行されます。
もしswitch文が緩い比較(==)を使っていたなら、文字列の '1' も数値の 1 に変換されて最初のcaseがマッチしてしまいます。しかし実際にはそうならないことから、switch文が厳密比較を行っていることが確認できます。
注意点
if文で==を使って書き慣れている場合、switch文に処理を置き換えると挙動が変わることがあります。特にユーザー入力やフォームの値など、文字列として取得される可能性がある値を扱う際は、事前にNumber()などで型変換しておくと安心です。
-
JavaScriptにおける厳密等価演算子(===)と寛容等価演算子(==)の違いを徹底解説
はじめにJavaScriptには、値を比較するための2種類の等価演算子が用意されています。それぞれ動作が異なるため、適切に使い分けることが重要です。寛容等価演算子(==)とは寛容等価演算子(==)は、比較対象となるオペランド同士の値を共通の型に変換(型強制)した上で、等しいかどうかを判定します。そのため、数値と文字列のように異なる型同士でも、「値が同じ」とみなされれば true を返します。厳密等価演算子(===)とは一方、厳密等価演算子(===)は、値だけでなくデータ型まで含めて比較を行います。値と型の両方が一致した場合にのみ true を返し、それ以外は false を返します。予期しない
-
JavaScriptのdebuggerステートメントの使い方を徹底解説
JavaScriptのdebuggerステートメントは、コード内にブレークポイントを設定するための構文です。実行中のコードがdebuggerステートメントに到達すると、その時点で処理が一時停止し、開発者ツールのデバッガーが利用可能であれば自動的にデバッガー機能が呼び出されます。 debuggerステートメントの基本動作 debuggerステートメントは、以下のような場面で特に役立ちます。 コードの特定の箇所で処理を止めて、変数の値を確認したいとき ループ処理の各ステップを詳細に追跡したいとき 複雑なロジックの不具合原因を特定したいとき なお、ブラウザの開発者ツール(DevTools)が開い