刚刚学习 JS,有 C++、C# 背景,我尝试过这个:
var userChoice=prompt("Enter 1,2 or 3");
switch(userChoice)
{
default : alert("Default case");
case '1': alert("case 1 ");
case '2': alert("case 2 ");
case '3': alert("case 3 ");
}
以及 C++ 中的类似代码片段:
#include<iostream>
using namespace std;
int main()
{
int userChoice=1;
switch(userChoice)
{
default : cout<<"Default case ";
case '1': cout<<"case 1 ";
case '2': cout<<"case 2 ";
case '3': cout<<"case 3 ";
}
return 0;
}
在使用 userChoice=1 执行两者时,我发现 JSFiddle排除 Default case ,而在 C++ 中,Ideone打印所有情况,包括默认情况。好吧,让我总结一下。
JS:
1.输入 userChoice=1 ,执行 case 1,case 2,case 3。
2.输入 userChoice=2 ,执行情况 2、情况 3。
3.输入 userChoice=3 ,执行情况 3。
4.输入userChoice=4/5..,执行default case,case 1,case 2,case 3。
C++:
1.输入userChoice=任何内容,它会执行所有情况!
现在做了一点改变,我在默认情况后放置了一个中断。 导致:
default : cout<<"Default case "; break;
我观察到的是 JS ,除了默认情况外,所有结果都是相同的。它不是执行所有情况,而是以默认情况终止,它应该终止,因为我使用了“Break”。
令人惊讶的是,在 C++ 中(当然在放置中断之后):
- 无论我给 userChoice 赋予什么值,输出都只是默认情况。 :|
困扰我的事情:
这些是这些语言的预期行为吗?或者它们在不同的编译器(对于 C++)上可能会有所不同。
JS 在执行之前是否已经知道默认情况的位置(我不知道该使用什么词),而 C++ 只是跟踪代码,直到到达中断处(或者可能是 return 或其他) ?
是的,我知道我应该更多地使用break语句..但仍然..出于好奇!
最佳答案
您将变量 userChoice
定义为类型 int
并将其初始化为 1。
在 switch 语句中,有一些字符常量将被转换为 int
类型,因此,如果编码是 ASCII、'2,'1'
将相当于 49 ' 将等于 50,依此类推。
因此,userChoice
将不等于两个常量,并且控制将传递给标签default
,并且该标签之后的所有语句将按顺序执行,因为没有任何跳转语句
#include<iostream>
using namespace std;
int main()
{
int userChoice=1;
switch(userChoice)
{
default : cout<<"Default case ";
case '1': cout<<"case 1 ";
case '2': cout<<"case 2 ";
case '3': cout<<"case 3 ";
}
return 0;
}
如果您按以下方式更改代码
#include<iostream>
using namespace std;
int main()
{
int userChoice=1;
switch(userChoice)
{
default : cout<<"Default case "; break;
case '1': cout<<"case 1 "; break;
case '2': cout<<"case 2 "; break;
case '3': cout<<"case 3 "; break;
}
return 0;
}
然后你会得到输出
Default case
如果您将字符“1”的整数值 49 分配给 userChoice,则输出将为
case 1
关于javascript - C++/JS 中的 Switch 语句变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22361078/