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(?
但即便如此,它还是有效的
开关情况进行严格比较(检查值和类型(。
元素的值为字符串类型。内部开关外壳值为 int 类型且不匹配。因此,如果没有转换,您的代码将不起作用。
但是当使用a == 1
时,只检查值而不是类型,并且"1" == 1
计算结果为 true。如果你做严格的比较(例如,===
(,"1" === 1
计算结果为 false,因为在这种情况下,虽然值相等但类型不相等。
以下方法将起作用:
switch (a) {
case "1":
.....
你可以在不解析的情况下让它工作,只需将switch
( 1
(中的预期值更改为字符串("1"
(:
switch (a) {
case "1":
//Rest of code
}
当然,在if
语句中使用==
时,这会为您进行类型转换(1 == "1"
(。在switch
中,它的行为类似于===
(相等运算符,不执行类型强制(。