我有个关于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;}
正如预期的那样,它没有警报。
引用: