【问题标题】:Switch-Case for strings in Javascript not working as expectedJavascript 中字符串的 Switch-Case 未按预期工作
【发布时间】:2010-04-04 00:36:45
【问题描述】:

所以我在字符串和 switch-case 方面遇到了这个问题,我会尽量保持简单。

这里 event.keyCode 的值为“65”,是“a”的 keydown 事件的结果(使用 JQuery)。

if (event.keyCode == "65") {
   alert("hmmmm");
}

这行得通,但是:

switch (event.keyCode) {
   case '65':
      alert("Yay!");
      break;
}

那不是。但是,这将起作用:

switch ('65') {
   case '65':
      alert("Yay!");
      break;
}

如果我这样做:

var t = '65';
switch (t) {
   case '65':
      alert("Yay!");
      break;
}

它有效。然后我尝试了这个:

var t = event.keyCode;
switch (t) {
   case '65':
      alert("Yay!");
      break;
}

但它失败了!

那么为什么它在开头的 if-block 中匹配,但在 switch-case 中却不匹配?

【问题讨论】:

  • 你的上下文测试是什么?

标签: javascript jquery string switch-statement


【解决方案1】:

keyCode 是一个整数,而不是字符串。当您使用== 时,转换是隐式完成的。但是,该开关使用 === 的等效项,它不允许隐式转换。您可以通过以下方式轻松测试:

switch (65) {
   case '65':
      alert("Yay!");
      break;
}

正如预期的那样,它不会发出警报。

这在ECMAScript,第 5 版第 12.11 节(switch 语句)中有说明。如果“input 等于 === 运算符定义的clauseSelector”,解释器将输入一个 case 语句。在我上面的例子中,input 是 65(整数),而 ClauseSelector 是 '65'(字符串),它们不是 ===

【讨论】:

  • 你说得对,我习惯了在比较时崩溃(int == string)。谢谢!
  • @2-Stroker,直接打开号码就行了。它也可能更快。
猜你喜欢
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
相关资源
最近更新 更多