在 javascript 中使用 switch(true) 来处理数字范围不起作用的情况?
Using switch(true) in javascript for case with number range not working?
我的目标是在午夜和中午 12 点之间存储带有“Good AM”的变量问候语。
如果在中午 12 点到下午 6 点之间,则为“下午好”。
如果在下午 6 点到午夜之间,则为“晚上好”。
我在底部附上了我的代码。
问题是,它总是 return greet = "Good AM"
的结果,即使它没有 morning/fall 在这种情况下指定的范围内。
我发现 case (0 < timeNow <= 12)
部分有问题
我修改了我的代码以使用 case(timeNow<=12)
替换 case (0 < timeNow <= 12)
它有效。
有谁知道为什么会这样?
p/s:我还注意到 'Unexpected mix of '<' 和 '<=' 的警告。 (no-mixed-operators)eslint' 在我的代码沙箱中。
const timeNow = new Date('8-26-2021 23:15:00').getHours();
console.log(timeNow);
switch (true) {
case (0 < timeNow <= 12):
greet = "Good AM";
break;
case timeNow <= 18:
greet = "Good Afternoon";
break;
case timeNow <= 23:
greet = "Good Evening";
break;
default:
greet = "error";
}
console.log(greet);
这个条件并不代表你认为的意思:
0 < timeNow <= 12
例如,如果第一个条件解析为 true
,则其余条件为:
true <= 12
这没有多大意义。表达式是 合乎逻辑的 ,而不是 直观的 。如果你想检查两个独立的东西,写两个独立的表达式并用逻辑运算符组合它们:
0 < timeNow && timeNow <= 12
就像@David 说的...这是一个带有硬编码时间的片段,用于演示目的以及第一个 case
语句中更正的比较:
const timeNow = new Date('8-26-2021 23:15:00').getHours();
console.log(timeNow);
switch (true) {
case (timeNow <= 12):
greet = "Good AM";
break;
case timeNow <= 18:
greet = "Good Afternoon";
break;
case timeNow <= 23:
greet = "Good Evening";
break;
default:
greet = "error";
}
console.log(greet);
我的目标是在午夜和中午 12 点之间存储带有“Good AM”的变量问候语。 如果在中午 12 点到下午 6 点之间,则为“下午好”。 如果在下午 6 点到午夜之间,则为“晚上好”。
我在底部附上了我的代码。
问题是,它总是 return greet = "Good AM"
的结果,即使它没有 morning/fall 在这种情况下指定的范围内。
我发现 case (0 < timeNow <= 12)
部分有问题
我修改了我的代码以使用 case(timeNow<=12)
替换 case (0 < timeNow <= 12)
它有效。
有谁知道为什么会这样?
p/s:我还注意到 'Unexpected mix of '<' 和 '<=' 的警告。 (no-mixed-operators)eslint' 在我的代码沙箱中。
const timeNow = new Date('8-26-2021 23:15:00').getHours();
console.log(timeNow);
switch (true) {
case (0 < timeNow <= 12):
greet = "Good AM";
break;
case timeNow <= 18:
greet = "Good Afternoon";
break;
case timeNow <= 23:
greet = "Good Evening";
break;
default:
greet = "error";
}
console.log(greet);
这个条件并不代表你认为的意思:
0 < timeNow <= 12
例如,如果第一个条件解析为 true
,则其余条件为:
true <= 12
这没有多大意义。表达式是 合乎逻辑的 ,而不是 直观的 。如果你想检查两个独立的东西,写两个独立的表达式并用逻辑运算符组合它们:
0 < timeNow && timeNow <= 12
就像@David 说的...这是一个带有硬编码时间的片段,用于演示目的以及第一个 case
语句中更正的比较:
const timeNow = new Date('8-26-2021 23:15:00').getHours();
console.log(timeNow);
switch (true) {
case (timeNow <= 12):
greet = "Good AM";
break;
case timeNow <= 18:
greet = "Good Afternoon";
break;
case timeNow <= 23:
greet = "Good Evening";
break;
default:
greet = "error";
}
console.log(greet);