LoginSignup
17
7

More than 5 years have passed since last update.

PHPとJavaScriptのswitch文の違い

Last updated at Posted at 2017-05-15

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

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にも載っているけど、そこをしっかり意識してというかわかって使ってなかったんだなぁと。

参考

17
7
0

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
  3. You can use dark theme
What you can do with signing up
17
7