search
LoginSignup
6

More than 5 years have passed since last update.

posted at

updated at

PHPとJavaScriptのswitch文の違い

アプリケーション作成は、複数言語でおこなわれることが多いと思いますが、同じ名称の構文だからと言って、安易に何も考えずに利用するのは危険だなぁと思いました。

PHPのswitch()

str.php
$str = "1";
switch ($str) {
    case "1":
        echo "1ですよ。";
        break;
    case "2":
        echo "2ですよ。";
        break;
    case "3":
        echo "3ですよ。";
        break;
    default :
        echo "defaultですよ。";
        break;
}

出力
「1ですよ。」

int.php
$int = 1;
switch ($int) {
    case "1":
        echo "1ですよ。";
        break;
    case "2":
        echo "2ですよ。";
        break;
    case "3":
        echo "3ですよ。";
        break;
    default :
        echo "defaultですよ。";
        break;
}

出力
「1ですよ。」

と、こんな感じで特に違和感もなく、switch(式)は型を見ずに評価してるので、式は「==」だということがわかります。

JavaScriptのswitch()

str.js
var str = "1";
switch (str) {
    case "1":
        console.log("1ですよ。");
        break;
    case "2":
        console.log("2ですよ。");
        break;
    case "3":
        console.log("3ですよ。");
        break;
    default :
        console.log("defaultですよ。");
        break;
}

出力
「1ですよ。」

int.js
var int = 1;
switch (int) {
    case "1":
        console.log("1ですよ。");
        break;
    case "2":
        console.log("2ですよ。");
        break;
    case "3":
        console.log("3ですよ。");
        break;
    default :
        console.log("defaultですよ。");
        break;
}

出力
「defaultですよ。」

JavaScriptのswitch(式)では、ちゃんと型まで見られている為、式評価(「===」)が厳密なので、caseに一致せずdefaultを通過しています。

当然MDNにも載っているけど、そこをしっかり意識してというかわかって使ってなかったんだなぁと。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
6