Можно ли предположить строгое сравнение в операторе переключения JavaScript?

105

У меня есть переменная, которая может быть логической 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?

Павел
источник

Ответы:

103

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

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

Федерико Леброн
источник
11
Это было вечеринками , как , что с 1999 года (стр 68, S 12,11, значение БлокаCase # 3.)
WALF
Тогда что? Я не уверен, почему вы здесь прервали цитату.
Олег В. Волков
34

http://qfox.nl/notes/110 отвечает на ваш вопрос. (Этот парень знает толк в тонкостях JavaScript)

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

Halcyon
источник
jsfiddle.net/to469fLm/4 , вы могли бы обобщить функцию принуждения для удовлетворения своих потребностей
darethas