Edited at

PHPとJavaScriptのswitch文の違い

More than 1 year has passed since last update.

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


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


参考