Javascript中的字符串切换案例无法按预期工作

时间:2010-04-04 00:36:46

标签: javascript jquery string switch-statement

所以我对字符串和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中匹配?

1 个答案:

答案 0 :(得分:58)

keyCode是一个整数,而不是一个字符串。使用==时,转换是隐式完成的。但是,交换机使用等效的===,不允许隐式转换。您可以使用以下方法轻松测试:

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

正如所料,它没有警觉。

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