Ist es sicher, in einer JavaScript-switch-Anweisung einen strengen Vergleich anzunehmen?

105

Ich habe eine Variable, die entweder boolesch falseoder eine ganze Zahl (einschließlich 0) sein kann. Ich möchte es in eine switch-Anweisung einfügen wie:

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

In meinen Tests in Google Chrome, so scheint es perfekt zu arbeiten, aber ich bin ein wenig nervös , es zu benutzen , weil ich , dass in einigen Browsern Angst habe, wenn my_varist false, könnte es den ersten Fall ausführen da 0 == false.

Ich frage mich nur, ob es irgendetwas Offizielles in JavaScript gibt, das besagt, dass die switch-Anweisung einen strengen Vergleich verwendet 0 !== false, aber ich kann selbst nichts finden, und ich bin mir nicht sicher, ob dies in verschiedenen JavaScript-Engines gut funktioniert. Weiß jemand, ob der Vergleich durch eine switch-Anweisung garantiert streng ist?

Paul
quelle

Antworten:

103

Schauen Sie sich ECMA 262, Abschnitt 12.11 , den zweiten Algorithmus, 4.c.

c. Wenn die Eingabe gleich der vom Operator === definierten Klauselauswahl ist, dann ...

Federico Lebrón
quelle
11
Es wird seit 1999 so gefeiert (Seite 68, S. 12.11, CaseBlock # 3)
Walf
Dann was? Ich bin mir nicht sicher, warum Sie das Zitat hier abgeschnitten haben.
Oleg V. Volkov
34

http://qfox.nl/notes/110 beantwortet Ihre Frage. (Dieser Typ weiß viel über das Wesentliche von JavaScript)

Schalter in Javascript verwenden eine strikte Typprüfung (===). Sie müssen sich also nie um Zwang sorgen, was ein paar WTFJs verhindert :). Wenn Sie andererseits mit Zwang rechnen, haben Sie Pech, weil Sie ihn nicht erzwingen können.

Halcyon
quelle
jsfiddle.net/to469fLm/4 , Sie könnten die Zwangsfunktion verallgemeinern, um Ihre Bedürfnisse zu erfüllen
darethas