Подтвердить что ты не робот

Безопасно ли предполагать строгое сравнение в инструкции для переключения JavaScript?

У меня есть переменная, которая может быть boolean false, или целое число (включая 0). Я хочу поставить его в оператор switch, например:

switch(my_var){
    case 0:
         // Do something
         break;
    case 1:
         // Do something else
         break;
    case false:
         // Some other code
}

В моих тестах в Google Chrome это работает отлично, но я немного нервничаю, чтобы использовать его, потому что я боюсь, что в некоторых браузерах, если my_var есть false, он может выполнить первый случай с 0 == false.

Мне просто интересно, есть ли что-то официальное в JavaScript, в котором говорится, что оператор switch будет использовать строгое сравнение, такое, что 0 !== false, но я ничего не могу найти сам, и я не уверен, что это будет хорошо работать в разных машинах JavaScript. Кто-нибудь знает, гарантируется ли строгое сравнение, сделанное оператором switch?

4b9b3361

Ответ 1

Взгляните на ECMA 262, раздел 12.11, второй алгоритм, 4.c.

с. Если вход равен clauseSelector, как определено оператором ===, тогда...

Ответ 2

Попытайся:

    switch(1) {
      case '1':
        alert('Switch comparison is NOT strict.');
        break;
      case 1:
        alert('Switch comparison is strict.');
        break;
      default: 
        alert('Huh?');
    }

Ответ 3

http://qfox.nl/notes/110 отвечает на ваш вопрос. (Этот парень много знает о nitty gritty JavaScript)

Переключатели в Javascript используют строгую проверку типов (===). Так что вы никогда приходится беспокоиться о принуждении, которое предотвращает несколько wtfjs:). Если на другой рукой вы рассчитывали на принуждение, тяжелая удача, потому что вы не можете заставить его.