Ich habe über die Jahre mit jQuery gearbeitet. In letzter Zeit habe ich mich jedoch tiefer mit der JavaScript-Sprache befasst. Vor kurzem habe ich von "wahrheitsgemäßen" und falschen Werten gehört. Ich verstehe sie jedoch nicht vollständig. Derzeit habe ich einen Code, der so aussieht:
var fields = options.fields || ['id', 'query'];
Ich muss feststellen, ob Felder null oder undefiniert sind oder eine Länge von 0 haben. Ich weiß, dass der lange Weg darin besteht:
if ((fields === null) || (fields === undefined) || (fields.length === 0)) {
...
}
Meine Frage ist, ist das gleiche das gleiche:
if (!fields) {
...
}
javascript
user687554
quelle
quelle
Antworten:
Bei der Programmierung ist Wahrhaftigkeit oder Falschheit die Qualität jener booleschen Ausdrücke, die sich nicht in einen tatsächlichen booleschen Wert auflösen, aber dennoch als boolesches Ergebnis interpretiert werden.
Im Fall von C wird jeder Ausdruck, der mit Null ausgewertet wird, als falsch interpretiert. In Javascript ist der Ausdruck
value
inwird als wahr ausgewertet, wenn
value
nicht:Siehe auch
Gibt es eine Standardfunktion, um in JavaScript nach null, undefinierten oder leeren Variablen zu suchen?
quelle
Die Menge der "truey" - und "falsey" -Werte in JavaScript stammt aus der
ToBoolean
abstrakten Operation, die in der ECMAScript-Spezifikation definiert ist und beim Erzwingen eines Werts in einen Booleschen Wert verwendet wird:Aus dieser Tabelle können wir das ersehen
null
undundefined
werden beidefalse
in einem booleschen Kontext dazu gezwungen . Ihrfields.length === 0
wird jedoch im Allgemeinen nicht einem falschen Wert zugeordnet. Wennfields.length
es sich um eine Zeichenfolge handelt, wird sie als behandeltfalse
(da es sich um eine Zeichenfolge mit der Länge Null handeltfalse
). Wenn es sich jedoch um ein Objekt (einschließlich eines Arrays) handelt, wird es dazu gezwungentrue
.Wenn
fields
eine Zeichenfolge sein sollte,!fields
ist dies ein ausreichendes Prädikat. Wennfields
es sich um ein Array handelt, ist Ihre beste Prüfung möglicherweise:quelle
Kurze Antwort:
Nein , sie sind nicht gleich.
Aber dieses:
if (!fields) { ... }
Ist das gleiche wie das:
if ((fields === null) || (fields === undefined) || (fields === 0) || (fields === '') || (fields === NaN) || (fields === flase)) { ...
}
Lange (und bessere) Antwort:
Lassen Sie uns zuerst über wahrheitsgemäße und falsche Werte sprechen.
Es geht darum, was passiert, wenn Sie etwas als Booleschen Wert bewerten. In JavaScript geschieht dies, wenn Sie beispielsweise
if
Anweisungen verwenden. logische Operatoren wie||
,!
oder&&
; oder dieBoolean()
Funktion.Die
Boolean()
Funktion akzeptiert einen Wert und gibt entwedertrue
oder zurückfalse
.Zum Beispiel:
var age = 1; // Let's evaluate age as a boolean Boolean(age); // true
Versuchen Sie dies in einer Knotenreplikation.
Ein boolean kann nur sein ,
true
oderfalse
, so dass der RückgabewertBoolean()
muss entwedertrue
oderfalse
. In diesem Fall haben wir den Wert übergeben1
und wenn er als Boolescher Wert ausgewertet wird,1
isttrue
.Wichtig: Bei der Auswertung als Boolescher Wert muss ein Wert entweder wahr oder falsch sein. Dies sind die einzigen beiden Optionen.
In JavaScript gibt es nur 6 falsche Werte. Werte,
false
die als Boolescher Wert ausgewertet werden. Sie sind:false
,0
,""
,null
,undefined
, undNaN
. Wenn einer dieser Werte als Boolescher Wert ausgewertet wird, ist er falsch:Boolean(false) // false Boolean(0) // false Boolean("") // false Boolean(null) // false Boolean(undefined) // false Boolean(NaN) // false
Dies bedeutet, dass jeder andere Wert in JavaScript
true
als Boolescher Wert ausgewertet wird. Jeder andere Wert in JavaScript ist also wahr.Eine andere einfache Möglichkeit, etwas als zu bewerten,
boolean
ist die Verwendung des!
Operators. Genau wie dieBoolean
Funktion wertet dies einen Wert als Booleschen Wert aus. Aber wahrheitsgemäße Werte werdenfalse
und fälschliche Werte werdentrue
.!false // true !0 // true !"" / true !null // true !undefined // true !NaN // true
Probieren Sie dies erneut in einer Knotenreplikation oder etwas anderem aus, um sicherzustellen, dass Sie es verstehen.
Also diese Aussage:
if (!fields) { ... }
Sagt Folgendes: "Wenn es
fields
als Boolescher Wert falsch ist, führen Sie den Code in dieser if-Anweisung aus."Wie für Ihre erste Aussage:
var fields = options.fields || ['id', 'query'];
Sie arbeiten mit dem logischen ODER-Operator, über den Sie unbedingt lesen sollten, um sicherzustellen, dass Sie ihn verstehen. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators
quelle
Ihr Code bedeutet:
Jetzt
options.fields
wird in einen booleschen Wert konvertiert. Per Definitionnull
,undefined
,0
,""
umgewandelt wirdfalse
, (meistens) etwas anderes umgewandelt wirdtrue
(aber ich will nicht so genau sein).Es bedeutet nicht dasselbe, weil die
fields.length === 0
Linie. Leere Arrays und andere Objekte werden in konvertierttrue
.Hinweis: Javascript ist manchmal ein großes Durcheinander ... Zum Beispiel sind zwei Operatoren für die Typprüfung (typeof und instanceof) nicht wirklich erforderlich. Es verwirrt ppl nur, wenn
true instanceof Boolean
es nicht funktioniert und die Verwendungtypeof(true) == "boolean"
fehleranfällig ist, da eine Zeichenfolge ohne automatische Vervollständigung eingegeben wird. Vielleicht werden diese Probleme in einigen neuen Versionen gelöst.quelle
Sie können versuchen (!! Felder), wenn das Feldelement null, undefiniert oder eine Länge von 0 hat, würde es true zurückgeben. Oder (!!! Felder) dann würde dies true zurückgeben.
der Doppelgänger ! oder !! wird wahr oder falsch erzwingen. Ich wünschte, ich könnte eine gute Definition dafür finden, aber ich scheine nicht in der Lage zu sein, sie wieder zu finden.
quelle