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

why should we parse value in switch condition but not in if condition?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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;
  }
}
1
2
3
4
5
6
<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语句识别输入并执行操作

但在转换过程中,我必须让它解析以识别

我不明白它为什么会起作用?我知道文本输入给出了sting,但如果是,那么if()语句在不解析的情况下如何工作?

通常我们使用if(a=="1")来比较字符串,而不是if(a==1)?

但即便如此,它仍然有效


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

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

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


The switch case does the strict comparison (check both value and type).

元素的值属于字符串类型。switch case值的类型为int,不匹配。因此,如果不进行转换,代码就无法工作。

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

以下内容有效:

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