为什么要在切换条件下解析值,而不在if条件下解析?

时间:2019-02-09 07:35:27

标签: javascript html html5 function if-statement

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

但即使如此,

2 个答案:

答案 0 :(得分:2)

  

开关 case 执行 严格比较 (同时检查 value 类型)。

元素的为字符串类型。内部开关 case 的值是 int 类型的,并且不匹配。因此,如果不进行转换,您的代码将无法工作。

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

以下将起作用:

switch (a) {
    case "1":
         .....

答案 1 :(得分:2)

您可以使它工作而无需解析,只需将switch1)中的期望值更改为字符串("1"):

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

当然,在使用if的{​​{1}}语句中,这确实为您键入了转换(==)。在1 == "1"中,它的行为类似于switch(等号运算符,不执行类型强制)。