121 votes

Est-il possible de supposer une comparaison stricte dans une instruction de commutation JavaScript ?

J'ai une variable qui peut être booléenne ou non. false ou un nombre 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, il 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_var es false il pourrait exécuter le premier cas puisque 0 == false .

Je me demande juste s'il y a quelque chose d'officiel dans JavaScript qui dit que l'instruction switch utilisera une comparaison stricte telle que 0 !== false mais je n'ai rien trouvé moi-même, et je ne suis pas sûr que cela fonctionne bien avec les différents moteurs JavaScript. Quelqu'un sait-il si la comparaison effectuée par une instruction switch est garantie stricte ?

118voto

Federico Lebrón Points 796

Jetez un coup d'œ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...

11 votes

Cela a été faire la fête comme ça depuis 1999 (page 68, art. 12.11, CaseBlock #3)

2 votes

Alors... quoi ? Je ne sais pas pourquoi tu as coupé la citation ici.

43voto

Halcyon Points 31203

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

Les commutateurs en Javascript utilisent une vérification stricte des types (===). Ainsi, vous n'avez jamais jamais à vous soucier de la coercition, ce qui évite quelques wtfjs :). Si par contre d'autre part, vous comptiez sur la coercition, pas de chance car vous ne pouvez pas la la forcer.

0 votes

jsfiddle.net/to469fLm/4 vous pouvez généraliser la fonction de coercition pour répondre à vos besoins.

10voto

MattDiPasquale Points 23842

Oui, switch "[utilise] la comparaison stricte, === ".

Source : switch - JavaScript | MDN

10voto

David Winiecki Points 673

Essayez-le :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X