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)?
但即使如此,
答案 0 :(得分:2)
开关 case 执行 严格比较 (同时检查 value 和类型)。
元素的值为字符串类型。内部开关 case 的值是 int 类型的,并且不匹配。因此,如果不进行转换,您的代码将无法工作。
但是当使用a == 1
时,仅检查 value 而不检查 type ,并且"1" == 1
的评估结果为 true 。如果进行严格比较(例如===
),则"1" === 1
的计算结果为 false ,因为在这种情况下,虽然 value 等于,但类型不相等。
以下将起作用:
switch (a) {
case "1":
.....
答案 1 :(得分:2)
您可以使它工作而无需解析,只需将switch
(1
)中的期望值更改为字符串("1"
):
switch (a) {
case "1":
//Rest of code
}
当然,在使用if
的{{1}}语句中,这确实为您键入了转换(==
)。在1 == "1"
中,它的行为类似于switch
(等号运算符,不执行类型强制)。