【问题标题】:Why does my if / else if statement work but my switch case doesn't? [closed]为什么我的 if / else if 语句有效但我的 switch case 无效? [关闭]
【发布时间】:2019-03-21 16:00:38
【问题描述】:

所以我遇到了这个问题,过去几个小时让我发疯了。

我有一个条件语句:

if (count == '0') {
  var variable = '0%'
  document.querySelector('.content').innerHTML = variable
}
else if (count == '1') {
  var variable = '5%'
  document.querySelector('.content').innerHTML = variable
}
else if (count == '2') {
  var variable = '10%'
  document.querySelector('.content').innerHTML = variable
}

它工作正常。唯一的问题是,我有 20 个值,所以我决定创建一个 switch 案例,而不是为 20 个值写相同的 if/else if

switch (count) {
  case '0':
    var variable = '0 %'
    document.querySelector('.content').innerHTML = variable
    break;
  case '1':
    var variable = '5 %'
    document.querySelector('.content').innerHTML = variable
    break;
}

由于某种原因它不起作用,我真的不明白出了什么问题。

TLDR:我的 if/else if 工作正常,但我的 switch 案例却不行,我不知道为什么不行。

【问题讨论】:

  • 您使用了错误的引号类型
  • 那个引号字符很奇怪。我不认为 JS 允许。
  • 为什么不直接使用...innerHTML = `${count * 5}%`
  • Switch 使用===,所以你的count == '2'case 2 不同
  • 您是在将字符串还是 int 传递到 switch 语句中。 1 !== '1'

标签: javascript


【解决方案1】:

可能是类型转换问题。

使用“if”方法时,您使用的是类型转换比较运算符 (==),因此 0 == '0' 产生 true。 另一方面,Switch 使用严格的比较运算符。

https://www.w3schools.com/js/js_switch.asp

严格比较

Switch case 使用严格比较 (===)。

这些值必须是相同的类型才能匹配。

只有当操作数属于同一类型时,严格比较才能成立。

【讨论】:

  • 我看到let count = 0 在交换机中不起作用,但let count ='0' 确实起作用。没想到这么好的发现!
【解决方案2】:

看起来你的开关中有奇怪的引号字符:

开关版本看起来像使用“智能引号”,根据它们是打开还是关闭而倾斜。许多富文本编辑器会自动将常规引号转换为智能引号,因此,如果您最初以富文本编写代码,或者通过 Slack 或其他方式复制并粘贴代码,这可能会解释这些字符的来源。

不过,很容易解决,只需将它们更改为您在 if 语句中使用的常规引号字符。

【讨论】:

  • 每当我看到这个问题时,通常是因为代码已被复制粘贴到文字处理器(例如 Word)中。 IDE 通常会对此大声抱怨,甚至会自动将它们转换回“简单”单引号。换句话说,这很可能是由于 OP 为 StackOverflow 准备问题的方式,而不是代码中的实际问题。
  • 哦,是的,好吧,这看起来像是最明显的直接问题,之后类型强制的事情就有意义了。
猜你喜欢
  • 1970-01-01
  • 2019-12-11
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多