É seguro assumir uma comparação estrita em uma instrução switch de JavaScript?

105

Eu tenho uma variável que pode ser booleana falseou um inteiro (incluindo 0). Quero colocá-lo em uma declaração switch como:

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

Em meus testes no Google Chrome, parece funcionar perfeitamente, mas estou um pouco nervoso para usá-lo porque temo que em alguns navegadores, se my_varestiver false, ele execute o primeiro caso desde então 0 == false.

Só estou me perguntando se há algo oficial em JavaScript que diga que a instrução switch usará uma comparação estrita 0 !== false, mas não consigo encontrar nada e não tenho certeza se isso funcionará bem em diferentes mecanismos de JavaScript. Alguém sabe se a comparação feita por uma instrução switch tem garantia de ser estrita?

Paulo
fonte

Respostas:

103

Dê uma olhada em ECMA 262, seção 12.11 , o segundo algoritmo, 4.c.

c. Se input for igual a clauseSelector conforme definido pelo operador ===, então ...

Federico Lebrón
fonte
11
Tem festejado assim desde 1999 (página 68, s. 12.11, CaseBlock # 3)
Walf
Então o que? Não sei por que você cortou a citação aqui.
Oleg V. Volkov
34

http://qfox.nl/notes/110 responde à sua pergunta. (Esse cara sabe muito sobre os detalhes do JavaScript)

As opções em Javascript usam verificação estrita de tipo (===). Assim, você nunca precisa se preocupar com coerção, o que impede alguns wtfjs :). Se, por outro lado, você estava contando com a coerção, azar porque você não pode forçá-la.

idílico
fonte
jsfiddle.net/to469fLm/4 , você pode generalizar a função de coação para atender às suas necessidades
darethas