[英]Why this switch statement isn't work perfectly?
const number = prompt("Enter your number"); const txt = "You result is: "; switch (number) { case (number >= 80 && number <= 100): document.write(`${txt} A+`); break; case (number >= 70 && number <= 80): document.write(`${txt} A gread`); break; case (number >= 60 && number <= 70): document.write(`${txt} B gread`); break; case (number >= 50 && number <= 60): document.write(`${txt} C gread`); break; case (number >= 33 && number <= 50): document.write(`${txt} D gread`); break; case (number >= 0 && number <= 33): document.write(`${txt} Field;`); break: case (number > 100 || number < 0). document.write(`It's not a valid number. Please input any valid number;`); break: default. document.write(`Not input any number. Please input any number;`); break; }
使用 switch 語句,您可以在switch
之后立即評估表達式。 在你的情況下,那將是number
。
因此,您的案例將使用數字進行評估。 這將發生:
number
的第一件事是(number >= 80 && number <= 100)
。 后者的結果為true
。number
的值88
與true
進行比較,如下所示: 88===true
。false
,因此評估下一個案例。這段代碼不起作用的原因有兩個:
第一個原因是因為prompt
方法返回一個字符串,你可以通過鍵入看到
console.log('Type of number:', typeof number); // Expected output: Type of number: string
可以通過解析提示方法的output來解決這個問題,如下
const number = parseInt(prompt("Enter your number"));
第二個原因是因為在switch
語句語句中,switch 表達式的評估值與 case 的評估值進行了比較。
這意味着將number
(number) 的值與表達式(number >= 80 && number <= 100)
進行比較(比較表達式),以此類推。
因此,除非一個 yoru case 表達式產生一個數字,否則switch
將嘗試將number
的值評估為表達式(始終為真),這意味着switch
正在比較45 === true
,不匹配任何情況。
只需使用if
/ else
代替:
if (number >= 80 && number <= 100)
document.write(`${txt} A+`);
else if (number >= 70 && number <= 80)
document.write(`${txt} A gread`);
else if (number >= 60 && number <= 70)
document.write(`${txt} B gread`);
else if (number >= 50 && number <= 60)
document.write(`${txt} C gread`);
else if (number >= 33 && number <= 50)
document.write(`${txt} D gread`);
else if (number >= 0 && number <= 33)
document.write(`${txt} Field !`);
else if (number > 100 || number < 0)
document.write(`It's not a valid number. Please input any valid number.`);
else
document.write(`Not input any number. Please input any number .`);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.