Warum gibt javascript eine String
lieber als andere Optionen zurück?
Betrachten Sie das folgende Snippet.
%Vor%Ich habe absichtlich ein nicht vorhandenes Array-Element aufgerufen.
Allerdings kann ich nicht verstehen, warum arr.item(43)
den String
zurückgibt? Warum nicht null
oder undefined
oder sogar 12
?
Weil this[x]
ist undefined
, was ist falsch, und so ist null
.
Der Operator ||
gibt den ersten gefundenen "Truthy" -Wert zurück und stoppt die Auswertung an diesem Punkt.
Wenn kein "truthy" -Wert gefunden wird, wird das Ergebnis des letzten evaluierten Operanden zurückgegeben.
Es gibt insgesamt 6 "falsche" Werte. Sie sind ...
false
undefined
null
""
NaN
0
Alles sonst gilt als truthy.
Also wird Ihr Ausdruck als ...
bewertet %Vor%Oder Sie könnten es so sehen:
%Vor%Die Aussage
%Vor% wertet die Teilausdrücke von links nach rechts aus und gibt den ersten Teilausdruck zurück, der nicht zu false ausgewertet wird. Das nicht vorhandene Element wird zu false ausgewertet, da es nicht definiert ist, und null
ist false . Dadurch bleibt der String als erster nicht falscher Teilausdruck übrig, also erhalten Sie das.
Der Code a || b
ist ungefähr gleichbedeutend mit a ? a : b
oder diesem etwas ausführlicheren Code:
Da ||
links-assoziativ ist, wird der Ausdruck a || b || c
als (a || b) || c
ausgewertet.
In einfachen Worten bedeutet dies, dass der Operator ||
bei der Verkettung den ersten Operanden zurückgibt, der "truthy" ist, oder das letzte Element.
Diese Funktion kann nützlich sein, um bei fehlenden Werten Standardwerte anzugeben:
%Vor% Sie können dies wie folgt lesen: Holen Sie sich das Ergebnis von f (). Wenn es sich um einen falschen Wert handelt, versuchen Sie es mit g (). Wenn dies auch einen falschen Wert ergibt, verwenden Sie defaultValue
.
Weil es in der Reihenfolge von links nach rechts ausgewertet wird.
Wenn Sie dies ändern würden:
%Vor%Deine Antwort wäre 12.
return this[x] || null || 'aïe' || 12 || undefined
gibt keinen von diesen zurück. Es soll das Ergebnis des Ausdrucks this[x] || null || 'aïe' || 12 || undefined
zurückgeben - ich glaube, es wird einen booleschen Wert zurückgeben.
Tags und Links javascript