È sicuro presumere un confronto rigoroso in un'istruzione switch JavaScript?


105

Ho una variabile che può essere booleana falseo un numero intero (compreso 0). Voglio metterlo in un'istruzione switch come:

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

Nei miei test in Google Chrome, sembra funzionare perfettamente, ma sono un po 'nervoso nell'usarlo perché temo che in alcuni browser, se lo my_varè false, potrebbe eseguire il primo caso da allora 0 == false.

Mi chiedo solo se c'è qualcosa di ufficiale in JavaScript che dice che l'istruzione switch utilizzerà un confronto rigoroso in modo tale 0 !== false, ma non riesco a trovare nulla da solo e non sono sicuro che funzionerà bene in diversi motori JavaScript. Qualcuno sa se il confronto fatto da un'istruzione switch è garantito per essere rigoroso?

Risposte:



34

http://qfox.nl/notes/110 risponde alla tua domanda. (Questo ragazzo sa molto del nocciolo duro di JavaScript)

Le opzioni in Javascript utilizzano il controllo del tipo rigoroso (===). Quindi non devi mai preoccuparti della coercizione, che impedisce alcuni wtfj :). Se invece stavi contando sulla coercizione, sfortuna perché non puoi forzarla.


jsfiddle.net/to469fLm/4 , potresti generalizzare la funzione di coercizione per soddisfare le tue esigenze
darethas

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.