2016-07-24 14 views
0

Es ist mein erstes Mal mit der switch Anweisung in Javascript. Gibt es eine Möglichkeit, mehrere Bedingungen eine switch-Anweisung zu bewerten, etwa so:mehrere Ausdrücke in einer Switch-Anweisung

var i = 1; 
switch(i && random(1)<0.3) { 
    case (1): 
     //code block 
     break; 
    case (2): 
     //code block 
} 

Damit die Codeblöcke würde ausführen, wenn beide der Bedingungen wahr wäre?

+1

* Damit die Code-Blöcke ausgeführt würden, wenn beide Bedingungen wahr waren *: beide? Wann sollte nur der erste ausgeführt werden, wann nur der zweite und wann keiner von ihnen? – trincot

+0

Sie könnten '+' anstelle von '&&' – Bergi

Antwort

0

Sie lesen so etwas tun könnte:

var i = 1; 
switch((i==1) + (Math.random(1)<0.3)*2) { 
    case 0: 
     //code block when neither is true 
     break; 
    case 1: 
     //code block when only i == 1 
     break; 
    case 2: 
     //code block when only random(1)<0.3 
     break; 
    case 3: 
     //code block when both i==1 and random(1)<0.3 
     break; 
} 

... aber es ist nicht wirklich der netteste Code und kann leicht zu Fehlern führen, wenn einer der getesteten Ausdrücke etwas anderes als 0 oder 1 ist (falsch oder wahr).

Es ist besser, if ... else Konstrukte zu verwenden, um damit umzugehen:

var i = 1; 
var small = Math.random(1)<0.3; 
if (i==1) { 
    if (small) { 
     //code block when both i==1 and random(1)<0.3 
    } else { 
     //code block when only i == 1 
    } 
} else if (small) { 
    //code block when only random(1)<0.3 
} else { 
    //code block when neither is true 
} 
0

Sie können das tun, aber die switch-Anweisung schaltet das Ergebnis des von Ihnen angegebenen Ausdrucks ein.

Wenn Sie eine logische und (&&) in Ihrem Ausdruck haben, gibt es zwei mögliche Ergebnisse definiert, wie && funktioniert.

  1. Wenn der linke Ausdruck als wahr ausgewertet wird, entspricht der Ausdruck der Auswertung des zweiten Teils.
  2. Wenn der linke Ausdruck als falsch ausgewertet wird, wird der gesamte Ausdruck als falsch ausgewertet.

Sie können mehr über die Switch-Anweisung auf der Ecmascript spec

+0

verwenden Eigentlich '&&' kann nicht-boolesche Ergebnisse auswerten, aber es stimmt, dass das aktuelle Skript nie mit einem der Fälle übereinstimmt – Bergi

+0

@Bergi danke für die Erinnerung. aktualisierte Antwort – eltonkamami

+0

Ich denke, ich würde 'Fall sagen (5 && wahr)' – Roman

0

Es ist möglich, switch-Anweisungen auf diese Weise zu schreiben:

switch (true) { 
    case a && b: 
    // do smth 
    break; 
    case a && !b: 
    // do other thing 
    break; 
} 

Das einzige, was Sie im Auge behalten müssen, ist, dass & & kann nicht nur Boolean, sondern jeden anderen Wert zurückgeben, wenn z 'a' (im Codefragment oben) wird in einen falschen Wert aufgelöst. Wenn 'b' eine Zeichenkette ist, dann soll eine & & b, wobei a falsch ist, eine Zeichenkette zurückgeben.
Also, wenn Sie dieses Muster immer verwenden, stellen Sie sicher, dass die rechte Seite von & & Ausdruck zu einem Boolean aufgelöst wird.