我们为什么要在切换条件下解析值而不是在条件中解析?

问题描述 投票:-2回答:2

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)?

但即便如此,它仍然有效

javascript html html5 function if-statement
2个回答
2
投票

您可以在不解析的情况下使其工作,只需将switch1)中的预期值更改为字符串("1"):

switch (a) {
    case "1":
        //Rest of code
}

当然,在你使用if==声明中,这会为你进行类型转换(1 == "1")。在switch中,它的行为类似于===(相等运算符,不执行类型强制)。


2
投票

开关盒进行严格的比较(检查值和类型)。

元素的值是string类型。内部开关案例值的类型为int且不匹配。因此,如果没有转换,您的代码将无效。

但是当使用a == 1时,只检查值而不是类型,"1" == 1评估为true。如果你进行严格的比较(例如,===),"1" === 1的计算结果为false,因为在这种情况下,虽然值相等但类型不相等。

以下将有效:

switch (a) {
    case "1":
         .....
© www.soinside.com 2019 - 2024. All rights reserved.