我有个关于String和switch-caseS问题,尽量将这个问题简单描述出来。

event.keyCode的值为65,对应字符为 'a' (using 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却不能符合要求。

原因:

keyCode是integer, 而不是string。 但你使用 ==, 这个装换过程是隐式。  虽然, switch 等价于 ===, 不允许隐式转换。 

测试如下:

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

正如预期的那样,它没有警报。

引用:http://stackoverflow.com/questions/2573145/switch-case-for-strings-in-javascript-not-working-as-expected