function runif() {
let a = document.getElementById('test').value;
if (a == 1) {
console.log("works");
}
}
function runswitch() {
let a = document.getElementById('test').value;
switch (a) {
case 1:
console.log("working");
break;
default:
break;
}
}
function runswitchOne() {
let a = parseInt(document.getElementById('test').value);
switch (a) {
case 1:
console.log("working");
break;
default:
break;
}
}
<form action="">
<input type="text" id="test">
<input type="button" onclick="runif()" value="click to check if">
<input type="button" onclick="runswitch()" value="click to check without parseInt">
<input type="button" onclick="runswitchOne()" value="click to check with parseInt">
</form>
这是我用文本输入和两个按钮创建的表单。
其中if语句识别输入并执行操作
但在开关中我必须解析才能识别
我不明白它为什么有效?我知道文本输入给出了刺痛但是如果是这样if()语句如何工作而不解析?
通常我们使用if(a ==“1”)比较字符串而不是if(a == 1)?
但即便如此,它仍然有效
您可以在不解析的情况下使其工作,只需将switch
(1
)中的预期值更改为字符串("1"
):
switch (a) {
case "1":
//Rest of code
}
当然,在你使用if
的==
声明中,这会为你进行类型转换(1 == "1"
)。在switch
中,它的行为类似于===
(相等运算符,不执行类型强制)。
开关盒进行严格的比较(检查值和类型)。
元素的值是string类型。内部开关案例值的类型为int且不匹配。因此,如果没有转换,您的代码将无效。
但是当使用a == 1
时,只检查值而不是类型,"1" == 1
评估为true。如果你进行严格的比较(例如,===
),"1" === 1
的计算结果为false,因为在这种情况下,虽然值相等但类型不相等。
以下将有效:
switch (a) {
case "1":
.....