【问题标题】:why should we parse value in switch condition but not in if condition?为什么我们应该在 switch 条件下解析 value 而不是在 if 条件下?
【发布时间】:2019-07-03 09:24:54
【问题描述】:

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语句在其中识别输入并进行操作

但在 switch 中我必须让它解析才能识别

我不明白它为什么有效?我知道文本输入会引起刺痛,但如果是这样,if() 语句如何在不解析的情况下工作?

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

但即便如此,它仍然有效

【问题讨论】:

  • = 是赋值,而不是比较,你的 if(a = 1) 实际上并没有测试任何东西,它总是会实现
  • 平等检查a == b 会,如果a 和b 的类型不同,type coercion(转换)为你。身份检查 a === b 也会比较类型,并且仅在值和类型都匹配时才返回 true。
  • if ("one" == "one") 比较字符串 if ("one" == one ) 是否抛出错误???
  • 即使 1 被认为是 "1" ;它会像 ("1"==1) 那样比较 --> 会怎么样??

标签: javascript html function if-statement


【解决方案1】:

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

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

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

以下将起作用:

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

【讨论】:

  • 很好解释的答案+1
【解决方案2】:

无需解析即可使其工作,只需将switch1)中的预期值更改为字符串("1")即可:

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

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

【讨论】:

  • 所以你是说在 if 语句中当我使用 == 时,这会进行类型转换! ..,是的,我试过了,没有人拉紧这个我认为它只是比较 tqsm!
  • 没问题@JacksonJegatheesan。使用=== 也很有用,因为当你以错误的方式使用不同的类型时,你就会知道。
猜你喜欢
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 2017-08-11
  • 1970-01-01
  • 2022-06-15
  • 2020-11-16
相关资源
最近更新 更多