Est-il sûr de supposer une comparaison stricte dans une instruction de commutation JavaScript?

105

J'ai une variable qui peut être booléenne falseou un entier (y compris 0). Je veux le mettre dans une instruction switch comme:

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

Dans mes tests dans Google Chrome, cela semble fonctionner parfaitement, mais je suis un peu nerveux à l'idée de l'utiliser car j'ai peur que dans certains navigateurs, si my_varc'est le cas false, il puisse exécuter le premier cas depuis 0 == false.

Je me demande simplement s'il y a quelque chose d'officiel dans JavaScript qui dit que l'instruction switch utilisera une comparaison stricte de telle sorte que 0 !== false, mais je ne trouve rien moi-même, et je ne suis pas sûr que cela fonctionnera bien dans différents moteurs JavaScript. Est-ce que quelqu'un sait si la comparaison effectuée par une instruction switch est garantie d'être stricte?

Paul
la source

Réponses:

103

Jetez un œil à ECMA 262, section 12.11 , le deuxième algorithme, 4.c.

c. Si input est égal à clauseSelector tel que défini par l'opérateur ===, alors ...

Federico Lebrón
la source
11
Il fait la fête comme ça depuis 1999 (page 68, art.12.11, CaseBlock # 3)
Walf
Alors ... quoi? Je ne sais pas pourquoi vous avez coupé la citation ici.
Oleg V. Volkov
34

http://qfox.nl/notes/110 répond à votre question. (Ce gars en sait beaucoup sur les détails de JavaScript)

Les commutateurs en Javascript utilisent une vérification de type stricte (===). Vous n'avez donc jamais à vous soucier de la coercition, ce qui empêche quelques wtfjs :). Si par contre vous comptiez sur la coercition, pas de chance car vous ne pouvez pas la forcer.

Alcyon
la source
jsfiddle.net/to469fLm/4 , vous pouvez généraliser la fonction de
coercition pour