Javascript 为什么在开关情况下逻辑OR运算符的行为异常?
Javascript 为什么在开关情况下逻辑OR运算符的行为异常?,javascript,Javascript,testMyNumber函数似乎认为第二个位置的数字不匹配 为什么4和10返回默认情况 函数testMyNumber(数字){ 开关(编号){ 案例6: 返回编号+“为6”; 打破 案例(3 | | 4): 返回编号+“为3或4”; 打破 案例9 | 10: 返回编号+“为9或10”; 打破 违约: 返回编号+“不在3,4,6,9,10中”; 打破 } }; console.log(testMyNumber(6)); console.log(testMyNumber(3)); console.
testMyNumber
函数似乎认为第二个位置的数字不匹配
为什么4和10返回默认情况
函数testMyNumber(数字){
开关(编号){
案例6:
返回编号+“为6”;
打破
案例(3 | | 4):
返回编号+“为3或4”;
打破
案例9 | 10:
返回编号+“为9或10”;
打破
违约:
返回编号+“不在3,4,6,9,10中”;
打破
}
};
console.log(testMyNumber(6));
console.log(testMyNumber(3));
console.log(testMyNumber(4));
console.log(testMyNumber(9));
console.log(testMyNumber(10))
因为(3 | | 4)
是3
而不是4,所以它跳转到默认值
console.log((3 | | 4));
var检验=4;
开关(测试){
案例3:
案例4:
控制台日志(“3和4”);
打破
违约:
console.log(“默认”);
}
为什么4返回默认情况
因为(3 | | 4)
等于3
,所以案例(3 | | 4):
与编写案例3:
相同
您使用的语法不正确。这样写:
case 3:
case 4:
return number + " is 3 or 4";
因为它不打算这样使用
| |
返回其第一个操作数(如果是真的),否则返回其第二个操作数
3 | | 4
返回3
,因为3
是真实的,所以case
将只检查3
:
console.log(3 | | 4)//因为这是真实的
控制台日志(0 | | 1)//1,因为0是错误的
如果你做3 | | 4,答案是3
正确的方法是这样做
函数testMyNumber(数字){
开关(编号){
案例6:
返回编号+“为6”;
打破
案例3:
案例4:
返回编号+“为3或4”;
打破
案例9:
案例10:
返回编号+“为9或10”;
打破
违约:
返回编号+“不在3,4,6,9,10中”;
打破
}
};代码>原因分为两部分
首先,JS中的switch语句不能在一种情况下处理多个值
那么当你尝试这样做时会发生什么呢?好的,见下文
console.log(3 | | 4)代码>由于JavaScript中的语法工作方式,您的案例4:
从未定义过
当您说case(3 | | 4):
时,您只告诉JavaScript一个case的名称,即表达式计算结果为什么的case。在本例中,(3 | | 4)
的计算结果为3
,因此您告诉JavaScript案例3:
第一个代码示例显示您试图执行的操作案例(3 | | 4)
总是计算为3
,因为3
是
您可以改为使用多个案例:
函数testMyNumber(数字){
开关(编号){
案例6:
返回编号+“为6”;
打破
案例3:
案例4:
返回编号+“为3或4”;
打破
案例9:
案例10:
返回编号+“为9或10”;
打破
违约:
返回编号+“不在3,4,6,9,10中”;
打破
}
};
console.log(testMyNumber(6));
console.log(testMyNumber(3));
console.log(testMyNumber(4));
console.log(testMyNumber(9));
console.log(testMyNumber(10))代码>中断代码>之后<代码>返回代码>也不是必需的。@Jesper我知道,我一直专注于解决代码中的问题。。。无论如何谢谢你