¿Es seguro asumir una comparación estricta en una declaración de cambio de JavaScript?

105

Tengo una variable que puede ser booleana falseo un número entero (incluido 0). Quiero ponerlo en una declaración de cambio como:

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

En mis pruebas en Google Chrome, parece funcionar perfectamente, pero estoy un poco nervioso por usarlo porque me temo que en algunos navegadores, si my_vares así false, podría ejecutar el primer caso desde entonces 0 == false.

Me pregunto si hay algo oficial en JavaScript que diga que la declaración de cambio usará una comparación estricta 0 !== false, pero no puedo encontrar nada yo mismo, y no estoy seguro de si esto funcionará bien en diferentes motores de JavaScript. ¿Alguien sabe si se garantiza que la comparación realizada por una declaración de cambio sea estricta?

Pablo
fuente

Respuestas:

103

Eche un vistazo a ECMA 262, sección 12.11 , el segundo algoritmo, 4.c.

C. Si la entrada es igual a clauseSelector según lo definido por el operador ===, entonces ...

Federico Lebrón
fuente
11
Ha estado de fiesta así desde 1999 (página 68, s. 12.11, CaseBlock # 3)
Walf
¿Y que? No estoy seguro de por qué cortó la cita aquí.
Oleg V. Volkov
34

http://qfox.nl/notes/110 responde a su pregunta. (Este tipo sabe mucho sobre el meollo de JavaScript)

Los conmutadores en Javascript usan una verificación de tipo estricta (===). Por lo tanto, nunca tendrá que preocuparse por la coerción, que evita algunos wtfjs :). Si por otro lado contabas con la coerción, mala suerte porque no puedes forzarla.

Martín pescador
fuente
jsfiddle.net/to469fLm/4 , puede generalizar la función de
coerción