Czy można bezpiecznie założyć ścisłe porównanie w instrukcji przełącznika JavaScript?

105

Mam zmienną, która może być wartością logiczną falselub liczbą całkowitą (w tym 0). Chcę umieścić to w instrukcji przełącznika, takiej jak:

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

W moich testach w Google Chrome wydaje się działać idealnie, ale trochę się denerwuję, gdy go używam, ponieważ obawiam się, że w niektórych przeglądarkach, jeśli my_vartak false, może to wykonać pierwszy przypadek od tego czasu 0 == false.

Zastanawiam się tylko, czy w JavaScript jest coś oficjalnego, które mówi, że instrukcja switch będzie używać ścisłego porównania, takiego 0 !== false, ale sam nie mogę niczego znaleźć i nie jestem pewien, czy to zadziała dobrze w różnych silnikach JavaScript. Czy ktoś wie, czy porównanie wykonane przez instrukcję przełącznika gwarantuje ścisłe?

Paweł
źródło

Odpowiedzi:

103

Spójrz na ECMA 262, rozdział 12.11 , drugi algorytm, 4.c.

do. Jeśli input jest równy clauseSelector zdefiniowanemu przez operator ===, to ...

Federico Lebrón
źródło
11
Tak imprezuje od 1999 roku (strona 68, s. 12.11, CaseBlock # 3)
Walf
Więc ... co? Nie jestem pewien, dlaczego uciąłeś tutaj cytat.
Oleg V. Volkov
34

http://qfox.nl/notes/110 odpowie na Twoje pytanie. (Ten facet dużo wie o podstawach JavaScript)

Przełączniki w JavaScript używają ścisłego sprawdzania typu (===). Więc nigdy nie musisz się martwić przymusem, który zapobiega kilku wtfjs :). Jeśli z drugiej strony liczyłeś na przymus, pech, bo nie możesz go wymusić.

Zimorodek
źródło
jsfiddle.net/to469fLm/4 , możesz uogólnić funkcję wymuszania , aby spełnić swoje potrzeby
darethas