1. || (logisch oder),
Im wahrsten Sinne des Wortes wird Falsch nur zurückgegeben, wenn sowohl vor als auch nach dem falschen, ansonsten wahr zurückgegeben wird.
alarm (wahr || false); // Truealert (false || true); // Truealert (true || true); // Truealert (false || false); // FALSCH
Dieser Dummkopf weiß es ~~
In einem tieferen Sinne gibt es jedoch eine andere Welt. Probieren Sie den folgenden Code aus
Alarm (0 || 1); // 1
Offensichtlich wissen wir, dass die erste 0 falsch bedeutet und die zweite 1 wahr ist, dann sollte das obige Ergebnis wahr sein, und die Tatsache gibt das Ergebnis zurück, 1. Sehen Sie sich den folgenden Code an:
Alarm (2 || 1); // 2
Wir wissen, dass die ersten 2 wahr sind und die letzten 1 wahr sind. Was ist das Rückgabeergebnis? Das Testergebnis ist 2, weiter lesen:
alert ('a' || 1); // 'a' 'In ähnlicher Weise ist das erste 'a' wahr, und die nächsten 1 ist wahr; Das Testergebnis ist 'a' und das folgende
alert ('' || 1); // 1Aus dem obigen wissen wir, dass die Front "falsch ist, die Rückseite 1 wahr ist, und das Rückgabeergebnis ist 1.. Schauen Sie sich Folgendes an
alert ('a' || 0); // 'a' 'Das erste 'a' ist wahr, und die nächste 0 ist falsch, das Rückgabeergebnis ist 'a', fordere die folgenden fort
alert ('' || 0); // 0Der vorherige "ist falsch und die nächste 0 ist ebenfalls falsch und das Rückgabeergebnis ist 0
Alert (0 || ''); // ''
Die erste 0 ist falsch, die nächste "ist falsch, das Rückgabeergebnis ist" "
Das heisst
1. So lange wie "||" ist vor "||" falsch, egal ob "||" ist wahr oder falsch im Rücken von "||", der Wert nach "||" wird zurückgegeben.
2. Solange "||" ist wahr, unabhängig davon, ob "||" ist wahr oder falsch, der Wert vor "||" wird zurückgegeben.
Ich nenne dies das Kurzschlussprinzip: Wenn Sie das Ergebnis des ersten kennen, werden Sie die Ausgabe danach kennen. Wenn der erste wahr ist, nehmen Sie den Wert des ersten und wenn der erste falsch ist, dann nehmen Sie den Wert des zweiten.
6 Bälle, an die sich JS erinnern muss: Bitte denken Sie daran: In JS logischen Operationen, 0, "", Null, falsch, undefiniert und Nan wird als falsch beurteilt, und die anderen sind wahr (es scheint, dass es keine Auslassung gibt, bitte bestätigen Sie). Sie müssen sich daran erinnern, sonst gibt es Probleme mit der Anwendung || Und &&.
Übrigens: Ich frage Sie oft, warum ich nicht direkt schreibe, wenn (Attr) direkt, wenn (Attr);
Tatsächlich ist dies eine strengere Art zu schreiben:
Bitte testen Sie den Unterschied zwischen Typ von 5 und Typ von !! 5. Die Funktion von !! ist eine Variable anderer Typen in einen Bool -Typ umzuwandeln.
2. && (logistisch und)
Wörtlich wird wahr nur dann zurückgegeben, wenn sowohl vor als auch nachher wahr sind, ansonsten wird falsch zurückgegeben.
alert (wahr && false); // falsealert (true && true); // Truealert (false && false); // falsealert (false && true); // FALSCH
Schauen wir uns dann nach der oben genannten Erfahrung die Situation an, in der "&&" Nummern nicht nur boolesche Typen sind.
alert ('' && 1); // '' ''Der Knoten ist zurückgekehrt "," && "Before" ist falsch und die 1 ist wahr danach wahr.
alert ('' && 0); // ''Der Knoten ist zurückgekehrt "," && "vor" ist falsch und die 0 ist auch falsch.
alert ('a' && 1); // 1Der Knoten kehrt 1 zurück, "&&" Bevor "a ist wahr, und das folgende ist ebenfalls wahr.
alert ('a' && 0); // 0Der Knoten kehrt 0 zurück, "&&" vor "a ist wahr, und das folgende ist 0 falsch.
alert ('a' && ''); // ''Der Knoten ist zurückgekehrt "," && "bevor" a ist wahr, und "After" ist falsch.
alert (0 && 'a'); // 0
Der Knoten kehrt 0 zurück, "&&" vor "0 ist falsch und das 'a' ist wahr.
Alert (0 && ''); // 0
Der Knoten kehrt 0 zurück, "&&" vor "0 ist falsch und der Nachher" ist auch falsch.
Kurzschlussprinzip
1. Solange "&&" falsch ist, egal ob "&&" wahr oder falsch ist, wird der Wert vor "&&" zurückgegeben;
2. Solange "&&" wahr ist, egal ob "&&" wahr oder falsch ist, gibt das Ergebnis den Wert nach "&&" zurück;
3. Anwendung in der Entwicklung
Die folgenden drei Codes sind gleichwertig:
a = a || "defaultValue"; if (! a) {a = "defaultValue"; } if (a == null || a == "" || a == undefiniert) {a = "defaultValue"; }Welches möchten Sie verwenden?
2. wie var yahoo = yahoo || {}; wird sehr weit verbreitet. Ist nicht der Weg, um den Anfangswert elegant zu erhalten? als wenn. . . . sonst ... viel besser, besser als? : Es ist viel besser.
3. Callback && callback ()
In Rückrufen ist dies oft auf diese Weise geschrieben und ist strenger. Stellen Sie zunächst fest, ob der Rückruf existiert. Wenn es existiert, führen Sie es aus. Der Zweck des Schreibens auf diese Weise besteht darin, zu verhindern, dass Fehler gemeldet werden.
Wenn Sie Callback () direkt schreiben; Der Code meldet einen Fehler, wenn der Rückruf nicht vorhanden ist.
4. umfassende Beispiele
Die Anforderungen sind in der Abbildung dargestellt:
Schreiben Sie hier eine Bildbeschreibung
Angenommen, die Wachstumsrate wird wie folgt angegeben:
1 Pfeil wird angezeigt, wenn die Wachstumsrate 5 beträgt;
2 Pfeile werden angezeigt, wenn die Wachstumsrate 10 beträgt;
3 Pfeile werden angezeigt, wenn die Wachstumsrate 12 beträgt;
4 Pfeile werden angezeigt, wenn die Wachstumsrate 15 beträgt;
Alle anderen zeigen 0 Pfeile an.
Wie implementiere ich es mit Code?
Ein bisschen wenn, sonst:
var add_level = 0; if (add_step == 5) {add_level = 1; } else if (add_step == 10) {add_level = 2; } else if (add_step == 12) {add_level = 3; } else if (add_step == 15) {add_level = 4; } else {add_level = 0; }Ein etwas besserer Schalter:
var add_level = 0; Switch (add_step) {case 5: add_level = 1; brechen; Fall 10: add_level = 2; brechen; Fall 12: add_level = 3; brechen; Fall 15: add_level = 4; brechen; Standard: add_level = 0; brechen;}Wenn die Anforderung geändert wird in:
Die Wachstumsrate beträgt> 12 und 4 Pfeile werden angezeigt.
3 Pfeile werden angezeigt, wenn die Wachstumsrate> 10 beträgt;
Die Wachstumsgeschwindigkeit beträgt> 5 und 2 Pfeile;
Wachstumsgeschwindigkeit> 0 zeigt 1 Pfeil;
Die Wachstumsgeschwindigkeit beträgt <= 0 und 0 Pfeile werden angezeigt.
Dann wird es sehr problematisch sein, mit Switch zu implementieren.
Haben Sie jemals daran gedacht, es in einer Zeile implementieren zu können?
OK, werfen wir einen Blick auf die starke Ausdruckskraft von JS:
var add_level = (add_step == 5 && 1) || (add_step == 10 && 2) || (add_step == 12 && 3) || (add_step == 15 && 4) || 0;
Mächtiger und besser:
var add_level = {'5': 1, '10 ': 2, '12': 3, '15 ': 4} [add_step] || 0;Die zweite Anforderung:
var add_level = (add_step> 12 && 4) || (add_step> 10 && 3) || (add_step> 5 && 2) || (add_step> 0 && 1) || 0;
Das obige ist eine umfassende Analyse des "&&" und "||" Operatoren in JavaScript haben Ihnen vom Herausgeber vorgestellt. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!