in einer Switch-Anweisung
switch (true) {
case 1: alert("Eins ist gleich true");
}jenes nicht zum Erfolg führt. D.h. mein obgies Beispiel würde in JacaScript gar nicht gleicher maßen funktionieren.
Richtig, bei switch wird intern nämlich der <http://de.selfhtml.org/javascript/sprache/operatoren.htm#vergleich@title=Identitätsoperator ===> für den Vergleich verwendet.
switch (foo) {
case bar : quux(); break;
}
ist identisch mit
if (foo === bar) {
quux();
}
Hier müssen Typ *und* Wert von foo und bar übereinstimmen - sofern es sich um Primitives handelt -, oder es muss ein und dasselbe Objekt sein.
Bei dem &-Operator kommt immer eine Number heraus, kein Boolean, daher müsste man explizit nach Boolean umwandeln: case Boolean(x & y) oder !!(x & y)
Das ist wirklich ein Grund, der für if/else spricht. Oder für case, je nachdem, was man vergleichen will - case(true) ist jedenfalls tückisch, wenn nicht ein Boolean-Wert bei den case-Ausdrücken herauskommt.
Mathias