0

我的问题是我想滚动到指定的 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");
    }
}

谢谢

4

3 回答 3

2

switch/case在 JavaScript 中不能这样工作。它总是测试每个cases 是否相等。

它所做的是将条件 (hours < "18"等) 转换为布尔值,因为它需要每个 的标量值case。然后将 的值与 shours中的每个值进行比较case。由于找不到匹配的(因为它们是trueand false)它跳转到default.

基本上运行的是以下内容:

if (hours == (hours < "8") {
  ...
} else if (hours == (hours < "13") {
  ...
} else if (hours == (hours < "18") {
  ...
} else if (hours == (hours < "24") {
  ...
}

每个case都与您给出的表达式进行比较switch,在本例中为hours.

是的,我Select Case有时也很想念VB。但是类 C 语言通常没有类似的东西(PowerShell 确实如此;-))。

于 2013-07-05T07:41:43.377 回答
1

除了与选择器相等之外, switch 语句不用于任何其他用途。

在您的代码中,选择器是每个逻辑表达式的结果。如果我们假设小时 = 8,则以下几行是相同的:

case hours < 8:
case (hours < "8"):
case (8 < "8"):
case false:
于 2013-07-05T07:41:24.993 回答
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 {
    ...
}
于 2013-07-05T08:21:15.707 回答