そのため、文字列とスイッチケースでこの問題が発生します。可能な限りシンプルに保つようにします。
ここで、event.keyCodeの値は「65」であり、「a」(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(switchステートメント)に記載されています。インタープリターは、「input
が===演算子で定義されたclauseSelector
と等しい場合」にcaseステートメントを入力します。上記の例では、input
は65(整数)で、clauseSelectorは '65'(文字列)です。これらは===
ではありません。