Der primitive boolesche Datentyp umfasst die Werte true und false:
> typeof false 'boolean' > typeof true 'boolean'
Werte werden wie folgt in Booleans konvertiert:
| Wert | Konvertiert zu Boolean |
|
|
|
|
Ein boolescher Wert | Identisch mit der Eingabe (keine Konvertierung erforderlich) |
Eine Zahl |
|
andere Zahlen → | |
Ein String |
|
andere Strings → | |
Ein Objekt |
|
Es gibtdrei Möglichkeiten, wie ein Wert in einen Boolean konvertiert werden kann:
| (Als Funktion aufgerufen, nicht als Konstruktor) |
| |
| Ein einzelnes „nicht“ konvertiert zu einem negierten Boolean; doppelt verwenden für die nicht negierte Konvertierung. |
Ich bevorzugeBoolean(), da es aussagekräftiger ist. Hier sind einige Beispiele:
> Boolean(undefined)
false
> Boolean(null)
false
> Boolean(0)
false
> Boolean(1)
true
> Boolean(2)
true
> Boolean('')
false
> Boolean('abc')
true
> Boolean('false')
trueÜberall dort, wo JavaScript einen Boolean erwartet, können Sie jeden Werttyp angeben, und er wird automatisch in einen Boolean konvertiert. Somit gibt es in JavaScript zwei Wertesätze: ein Satz wird zu false konvertiert, während der andere Satz zu true konvertiert wird. Diese Sätze werden als falsy values und truthy values bezeichnet. Angesichts der vorherigen Tabelle sind die folgenden Werte alle falsy:
undefined, nullfalse0, NaN''Alle anderen Werte – einschließlich aller Objekte, selbst leerer Objekte, leerer Arrays und new Boolean(false) – sind truthy. Da undefined und null falsy sind, können Sie die if-Anweisung verwenden, um zu überprüfen, ob eine Variable x einen Wert hat.
if(x){// x has a value}
Der Vorbehalt ist, dass die vorherige Überprüfung alle falsy Werte als „keinen Wert haben“ interpretiert, nicht nur undefined und null. Aber wenn Sie mit dieser Einschränkung leben können, erhalten Sie ein kompaktes und etabliertes Muster.
Alle Objekte sindtruthy:
> Boolean(new Boolean(false))
true
> Boolean([])
true
> Boolean({})
trueDas unterscheidet sich von der Art und Weise, wie Objekte in eineZahl oder einen String konvertiert werden, wo Sie das Ergebnis steuern können, indem Sie die Methoden valueOf() und toString() implementieren:
> Number({ valueOf: function () { return 123 } })
123
> String({ toString: function () { return 'abc' } })
'abc'Die Konvertierung in Boolean ist aus historischen Gründen unterschiedlich. Für ECMAScript 1 wurde beschlossen, Objekten nicht zu ermöglichen, diese Konvertierung zu konfigurieren (z. B. über eine toBoolean()-Methode). Die Begründung war, dass die booleschen Operatoren || und && die Werte ihrer Operanden beibehalten. Daher kann bei Verkettung dieser Operatoren derselbe Wert mehrmals auf Wahrheit oder Falschheit geprüft werden. Solche Prüfungen sind bei Primitiven günstig, wären aber bei Objekten teuer, wenn diese ihre Konvertierung in Boolean konfigurieren könnten. ECMAScript 1 vermied diese Kosten, indem es Objekte immer truthy machte.
In diesem Abschnitt behandeln wir die Grundlagen der logischen Operatoren Und (&&), Oder (||) und Nicht (!).
Binäre logische Operatoren sind:
Sie geben immer einen der Operanden unverändert zurück.
> 'abc' || 123 'abc' > false || 123 123
Der zweite Operand wird nicht ausgewertet, wenn der erste Operand das Ergebnis bereits bestimmt. Zum Beispiel (das Ergebnis von console.log ist undefined):
> true || console.log('Hello')
true
> false || console.log('Hello')
Hello
undefinedDas ist ein ungewöhnliches Verhalten für Operatoren. Normalerweise werden alle Operanden ausgewertet, bevor ein Operator aufgerufen wird (genau wie bei Funktionen).
Wenn der erste Operand in einen false konvertiert werden kann, gib ihn zurück. Andernfalls gib den zweiten Operanden zurück:
> true && false false > false && 'def' false > '' && 'def' '' > 'abc' && 'def' 'def'
Wenn der erste Operand in einen true konvertiert werden kann, gib ihn zurück. Andernfalls gib den zweiten Operanden zurück:
> true || false true > true || 'def' true > 'abc' || 'def' 'abc' > '' || 'def' 'def'
theValue||defaultValue
Der Parameter text der Funktion saveText() ist optional und sollte der leere String sein, wenn er weggelassen wurde:
functionsaveText(text){text=text||'';...}
Dies ist die häufigste Verwendung von || als Standardoperator. Konsultieren Sie Optionale Parameter für weitere Informationen zu optionalen Parametern.
Das Objekt options kann die Eigenschaft title haben oder nicht. Wenn sie fehlt, sollte der Wert 'Untitled' verwendet werden, wenn der Titel gesetzt wird.
setTitle(options.title||'Untitled');
Die Funktion countOccurrences zählt, wie oft regex in str übereinstimmt.
functioncountOccurrences(regex,str){// Omitted: check that /g is set for `regex`return(str.match(regex)||[]).length;}
Das Problem ist, dass match() (siehe String.prototype.match: Capture-Gruppen oder Rückgabe aller übereinstimmenden Teilstrings) entweder ein Array oder null zurückgibt. Dank || wird im letzteren Fall ein Standardwert verwendet. Daher können Sie in beiden Fällen sicher auf die Eigenschaft length zugreifen.
Derlogische Nicht-Operator ! konvertiert seinen Operanden in einen Boolean und negiert ihn dann:
> !true
false
> !43
false
> !''
true
> !{}
falseDie folgenden Operatoren werden an anderer Stelle behandelt.
===, !==, ==, != (siehe Gleichheitsoperatoren: === versus ==)>, >=, <, <= (siehe Vergleichsoperatoren) Die Funktion Boolean kann auf zwei Arten aufgerufen werden.
Boolean(wert)
Als normale Funktion konvertiert sie wert in einen primitiven Boolean (siehe Konvertierung in Boolean).
> Boolean(0) false > typeof Boolean(false) // no change 'boolean'
new Boolean(bool)
Als Konstruktor erstellt sie eine neue Instanz von Boolean (siehe Wrapper-Objekte für Primitive), ein Objekt, das bool umschließt (nachdem es in einen Boolean konvertiert wurde). Zum Beispiel:
> typeof new Boolean(false) 'object'
Der erstere Aufruf ist der gebräuchlichste.