刚学习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 ++中的simillar片段:
#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排除了默认情况,而在C ++中,Ideone打印所有情况,包括默认情况。好的,让我总结一下。
1.输入userChoice = 1,执行案例1,案例2,案例3。
2.Putting userChoice = 2,执行案例2,案例3。
3.Putting userChoice = 3,执行案例3.
4.Putting userChoice = 4/5 ..,执行默认情况,案例1,案例2,案例3。
1.Putting userChoice = any,它执行所有情况!
现在稍微改变一下,我在默认情况下休息一下。 导致:
default : cout<<"Default case "; break;
我观察到的是JS,除了默认情况外,所有结果都是相同的。它不是执行所有情况,而是以默认值终止,它应该是,因为我使用了'Break'。
令人惊讶的是,在C ++中(在打破之后):
困扰我的事情:
这些语言的这些预期行为,或者它们可能在不同的编译器上有所不同(对于C ++)。
在执行之前,JS是否已经知道默认情况的位置(我不知道使用什么词),而C ++只是跟随代码,直到它到达中断(或者可能是返回或其他东西)
是的,我知道我应该更多地使用休息陈述..但仍然是出于好奇!
答案 0 :(得分:2)
您将变量userChoice
定义为类型int
并将其初始化为1。
在switch语句中,有一些字符常量将转换为int
类型。如果编码为ASCII,则'1'
将等于49,&#39; 2&#39;将等于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
如果你要指定49是字符&#39; 1&#39;的整数值。到userChoice然后输出
case 1