在Javascript中if -statement中的Falsy值?

时间:2016-01-28 22:46:47

标签: javascript

在过去的两周里,我一直在学校里练习这个JavaScript的事情,我一直在做功课。

在书中,#14; JavaScript:The Good Parts"作者Douglas Crockford在第11页的if -statement中列出了虚假值。现在我试图在html表单中测试用户的输入,以便在case语句中返回false。但我认为,有些事情确实是错误的。这是我的代码。任何人都可以帮助我吗?

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>My JavaScript Page</title>

<!--JavaScript starts here-->

<script>
function test() {
    var input = document.getElementById("userInput").value;
    switch (input){
    case false:
        document.getElementById("result").innerHTML = "False"
    break;
    case typeof() == "null":
        document.getElementById("result").innerHTML = "False"
    break;
        case typeof() == "undefined":
        document.getElementById("result").innerHTML = "False"
    break;
        case '':
        document.getElementById("result").innerHTML = "False"
    break;
        case "0":
        document.getElementById("result").innerHTML = "False"
    break;
        case isNan():
        document.getElementById("result").innerHTML = "False"
    break;
    default : document.getElementById("result").innerHTML = "True"
    }
} 

</script>


<!--End of JavaScript-->

</head>
<body>
<h1>True or False in JavaScipt</h1>
<form>
Your Input: <input type="text" id="userInput">
<br>
<button type="button" value="Test" onClick="test()">Test!</button>
</form>
<br>
<br>
<p id="result"></p>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

case之后的值必须等于switch()语句中的值,即

case x:

类似于:

if (input == x) {

您无法在那里进行比较,并希望它将input插入其中的相应部分。

而不是switch,您需要使用if

if (input === false) {
    document.getElementById("result").innerHTML = "False";
} else if (typeof(input) == "null") {
    document.getElementById("result").innerHTML = "False";
} else if (typeof(input) == "undefined") {
    document.getElementById("result").innerHTML = "False";
} else if (input === "") {
    document.getElementById("result").innerHTML = "False";
} else if (input === "0") {
    document.getElementById("result").innerHTML = "False";
} else if (isNaN(input)) {
    document.getElementById("result").innerHTML = "False";
} else {
    document.getElementById("result").innerHTML = "True";
}

由于所有情况都在做同样的事情,你可以将它们与OR运算符||结合起来:

if (input === false || typeof(input) == "null" || typeof(input) == "undefined" || input === "" || input === "0" || isNaN(input)) {
    document.getElementById("result").innerHTML = "False";
} else {
    document.getElementById("result").innerHTML = "True";
}

顺便说一句,请注意,如果您尝试识别所有虚假值,那么"0"案例就是错误的。唯一的字符串是空字符串""数字 0是假的,但不是字符串"0"

请参阅https://developer.mozilla.org/en-US/docs/Glossary/Falsy以获取Javascript中所有虚假值的完整列表。