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我知道,我一直专注于解决代码中的问题。。。无论如何谢谢你