2012-05-11 36 views
0

沒有顯示在瀏覽器中,因爲JavaScript沒有編譯器來運行它,雖然我不知道如何檢查這種語言的錯誤。我的開關結構dosent似乎工作(JavaScript控制結構)

我的HTML

<!doctype html> 
<html> 
    <head> 
    <title>Where am I?></title> 
    <script src="script4.js"></script> 
    </head> 
    <body> 
    </body> 
</html> 

我script4.js

var number = 20; 
switch(number) { 
    case number > 0: 
    alert(number + " is Positive"); 
    break; 
    case number === 0: 
    alert(number + " is zero"); 
    break; 
    case number < 0; 
    alert(number + " is negative"); 
    default: 
    alert(number + " is not a number"); 
} 
+0

每個瀏覽器都有「開發者工具」(通常是F12),請檢查工具的控制檯視圖是否有錯誤(例如,對於IE F12,單擊「腳本」選項卡)。在你的問題中發佈錯誤。 –

+2

注意事項 - 您在'number <0'情況下缺少'break;'。 – jbabey

回答

1

我沒想到RedFilter的解決方案是可行的。 (很高興知道!)在大多數基於C的語言中,只能針對特定的值。所以一般來說,if/else鏈用於:

if (number > 0) 
    alert(number + " is Positive"); 
else if (number === 0) 
    alert(number + " is zero"); 
else if (number < 0) 
    alert(number + " is negative"); 
else 
    alert(number + " is not a number"); 
3

這不是如何switch語句通常使用。 case的參數必須是數字,字符串或布爾值(在這種情況下,您可以使用可解析爲布爾值的表達式,但我不明白爲什麼您必須這樣做而不是使用if;我發現後者更容易閱讀和理解):

switch(number) { 
    case 1: 
     alert("number is 1"); 
     break; 
    ... 
    ... 

    default: 
     alert("Unknown number"); 
} 

什麼,你應該用在這裏是if/else:當您使用布爾表達式的參數switch是對布爾比較

if(number > 0) { 
    alert("number is positive"); 

} else if(number === 0) { 
    alert("number is zero"); 

} else if(number < 0) { 
    alert("number is negative"); 

} else { 
    alert("not a number"); 
} 

會發生什麼值爲truefalse。所以,你基本上將number的數值與truefalse進行比較,而這永遠不會匹配。

+0

如果你打算倒戈,至少有禮貌來解釋原因。 –

+0

沒有理由不對一堆布爾表達式比較使用開關。根據我的經驗,這是一種相當常見的JavaScript模式。我不相信通過使用if/else if語句有任何內在的改進。 – RedFilter

+0

這是如何保證downvote? Downvotes是*錯誤的*答案。我寫的東西本質上是錯誤的;我的方法是不同的。我發現'if-else'是更可讀的恕我直言。 –

5

的JavaScript會比較開關值每一種情況下表達,所以你可以使用true開關值,讓你寫布爾case語句,如:

switch(true) 
{ 
    case number > 0: 
     alert(number + " is Positive"); 
     break; 
    case number === 0: 
     alert(number + " is zero"); 
     break; 
    case number < 0: 
     alert(number + " is negative"); 
     break; 
    default: 
     alert(number + " is not a number"); 
} 

JSFiddle example here

注意雖然這對我來說是一種常見模式(並且我希望存在於其他語言(如C#)中),但某些開發人員可能會發現它不符合常規。

+0

+1有趣的使用'switch'在JavaScript中,我從來沒有見過。 – Lekensteyn

+0

+1,我更喜歡這種方法,而不是嵌套if-else-如果不管JSLint說什麼。 – jbabey

+1

雖然這有效,但我不認爲這是一個比if-else更好的方法。一個'if-else'明確向任何閱讀代碼的人展示了您正在通過特定案例進行工作。以這種方式使用'switch'非常聰明,但並不明顯。 –