Случай переключателя для строк в JavaScript, не работающем как ожидалось

Таким образом, у меня есть эта проблема со строками и случаем переключателя, и я попытаюсь сохранить его максимально простым.

Здесь event.keyCode имеет значение "65" и является результатом 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;
}

Но это перестало работать!

Итак, почему это соответствует в если-блоке вначале, но не для случая переключателя?

28
задан Coltin 4 April 2010 в 00:36
поделиться

1 ответ

keyCode является целым числом, а не строкой. Когда вы используете == , преобразование выполняется неявно. Однако переключатель использует эквивалент === , который не допускает неявных преобразований. Вы можете легко это проверить с помощью:

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

Как и ожидалось, он не выдает предупреждения.

Об этом говорится в ECMAScript , 5-е издание, раздел 12.11 (оператор переключения). Интерпретатор введет оператор case, если « input равен clauseSelector , как определено оператором ===». input - 65 (целое число), а clauseSelector - '65' (строка) в моем примере выше, что не является === .

58
ответ дан 28 November 2019 в 03:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: