JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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()などで型変換しておくと安心です。

  1. JavaScriptにおける厳密等価演算子(===)と寛容等価演算子(==)の違いを徹底解説

    はじめにJavaScriptには、値を比較するための2種類の等価演算子が用意されています。それぞれ動作が異なるため、適切に使い分けることが重要です。寛容等価演算子(==)とは寛容等価演算子(==)は、比較対象となるオペランド同士の値を共通の型に変換(型強制)した上で、等しいかどうかを判定します。そのため、数値と文字列のように異なる型同士でも、「値が同じ」とみなされれば true を返します。厳密等価演算子(===)とは一方、厳密等価演算子(===)は、値だけでなくデータ型まで含めて比較を行います。値と型の両方が一致した場合にのみ true を返し、それ以外は false を返します。予期しない

  2. JavaScriptのdebuggerステートメントの使い方を徹底解説

    JavaScriptのdebuggerステートメントは、コード内にブレークポイントを設定するための構文です。実行中のコードがdebuggerステートメントに到達すると、その時点で処理が一時停止し、開発者ツールのデバッガーが利用可能であれば自動的にデバッガー機能が呼び出されます。 debuggerステートメントの基本動作 debuggerステートメントは、以下のような場面で特に役立ちます。 コードの特定の箇所で処理を止めて、変数の値を確認したいとき ループ処理の各ステップを詳細に追跡したいとき 複雑なロジックの不具合原因を特定したいとき なお、ブラウザの開発者ツール(DevTools)が開い