我的问题是我想滚动到指定的div (#morg,#vorm,#nachm,#abe),它总是转到默认语句。
为什么?
function scrollToCarret(listview) {
var hour = new Date();
var hours = hour.getHours();
console.log(listview + hours);
switch(hours) {
case hours < "8":
console.log("< 8");
break;
case hours < "13":
console.log("< 13");
break;
case hours < "18":
console.log("< 18");
break;
case hours < "24":
console.log("< 24");
break;
default:
console.log("faiL");
}
}
由于
答案 0 :(得分:2)
switch
/ case
不能像那样工作。它总是测试每个case
的相等性。
它的作用是将条件(hours < "18"
等)转换为布尔值,因为它需要每个case
的标量值。然后将hours
的值与case
s中的每个值进行比较。由于找不到匹配的(因为它们是true
和false
),因此它会跳转到default
。
基本上运行的是以下内容:
if (hours == (hours < "8") {
...
} else if (hours == (hours < "13") {
...
} else if (hours == (hours < "18") {
...
} else if (hours == (hours < "24") {
...
}
将每个case
与您在switch
中提供的表达式进行比较,在本例中为hours
。
是的,我有时也非常想念VB Select Case
。但是类C语言通常没有类似的东西(但PowerShell确实如此; - ))。
答案 1 :(得分:1)
Switch statements不会用于任何其他内容。
在您的代码中,选择器是每个逻辑表达式的结果。如果我们假设hours = 8:
,则以下行是相同的case hours < 8:
case (hours < "8"):
case (8 < "8"):
case false:
答案 2 :(得分:0)
switch
语句的工作原理是将第一个表达式(switch
关键字后面的表达式)与case
个关键字后面的表达式进行比较。
因此,在您的代码中,您基本上将hours
(预期为整数)与hours < "8"
(布尔值)进行比较,这会产生意外结果。
您想要做的是改变:
switch (hours) {
case hours < "8":
...
case hours < "13":
...
case hours < "18":
...
case hours < "24":
...
default:
...
}
要:
if (hours < 8) {
...
} else if (hours < 13) {
...
} else if (hours < 18) {
...
} else if (hours < 24) {
...
} else {
...
}