[英]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中的每個值進行比較。 由於找不到匹配的對象(因為它們為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卻是如此;-)。
除了與選擇器相等外, 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.