簡體   English   中英

開關盒不起作用

[英]switch case doesn't works

我的問題是我想滾動到指定的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");
    }
}

謝謝

JavaScript中的switch / case不能那樣工作。 它總是測試每個case是否相等。

它的作用是將條件( hours < "18"等)轉換為布爾值,因為每種case需要一個標量值。 然后將hours值與case s中的每個值進行比較。 由於找不到匹配的對象(因為它們為truefalse ),因此它將跳轉到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卻是如此;-)。

除了與選擇器相等外, switch語句不用於其他任何用途。

在您的代碼中,選擇器是每個邏輯表達式的結果 如果我們假設小時= 8,則以下幾行是相同的:

case hours < 8:
case (hours < "8"):
case (8 < "8"):
case false:

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 {
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM