Col*_*tin 28 javascript string jquery switch-statement
所以我有字符串和switch-case这个问题,我会尽量保持简单.
这里event.keyCode的值为"65",并且是'a'的keydown事件的结果(使用JQuery).
if (event.keyCode == "65") {
alert("hmmmm");
}
Run Code Online (Sandbox Code Playgroud)
这有效,但是:
switch (event.keyCode) {
case '65':
alert("Yay!");
break;
}
Run Code Online (Sandbox Code Playgroud)
事实并非如此.然而,这将工作:
switch ('65') {
case '65':
alert("Yay!");
break;
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
var t = '65';
switch (t) {
case '65':
alert("Yay!");
break;
}
Run Code Online (Sandbox Code Playgroud)
有用.然后我尝试了这个:
var t = event.keyCode;
switch (t) {
case '65':
alert("Yay!");
break;
}
Run Code Online (Sandbox Code Playgroud)
但它失败了!
那么为什么它在开头的if-block中匹配,而不是在switch-case中呢?
Mat*_*hen 58
keyCode是一个整数,而不是一个字符串.使用时==,转换是隐式完成的.但是,交换机使用等效的===,不允许隐式转换.您可以使用以下方法轻松测试:
switch (65) {
case '65':
alert("Yay!");
break;
}
Run Code Online (Sandbox Code Playgroud)
正如所料,它没有警觉.
这在ECMAScript第5版第12.11节(转换声明)中说明.如果" input等于clauseSelector===运算符定义的",解释器将输入case语句. input在我上面的例子中,是65(整数)和clauseSelector是'65'(字符串),而不是===.
| 归档时间: |
|
| 查看次数: |
57182 次 |
| 最近记录: |