为什么我的if / else if语句有效,但我的switch用例无效?

时间:2019-03-21 16:00:39

标签: javascript

所以我遇到了这个问题,在过去的几个小时中,这一直困扰着我。

我有条件声明:

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个值,所以我决定写一个if/else if案例,而不是为20个值写相同的switch

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情况不理想,我不知道为什么不这样做。

2 个答案:

答案 0 :(得分:7)

可能是类型转换问题。

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

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

  

严格比较

     

切换案例使用严格的比较(===)。

     

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

     

仅当操作数具有相同类型时,严格比较才能成立。

答案 1 :(得分:-2)

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

enter image description here

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

不过,修复起来很容易,只需将它们更改为if语句中的常规引号字符即可。