Javascript中的字符串的Switch-Case无法按预期工作

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

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

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

正如所料,它没有警觉。

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