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

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

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

Nos meus testes no Google Chrome, parece funcionar perfeitamente, mas estou um pouco nervoso para usá-lo porque temo que, em alguns navegadores, se my_var é false , ele pode executar o primeiro caso desde 0 == false .

Eu só estou querendo saber se há alguma coisa oficial em JavaScript que diz que a declaração switch irá usar comparação estrita, tal que 0 !== false , mas eu não consigo encontrar nada eu mesmo, e eu não tenho certeza se isso vai funcionar bem em diferentes motores JavaScript. Alguém sabe se a comparação feita por uma instrução switch é garantida como estrita?

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

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

Tente:

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

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

Switches em Javascript usam verificação de tipo restrito (===). Então você nunca precisa se preocupar com coerção, o que impede alguns wtfjs :). Se, por outro lado, você estivesse contando com coerção, azar, porque você não pode forçá-lo.