return String vs Integer vs undefiniert vs null

8

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 ?

    
Pierre 20.12.2011, 15:50
quelle

6 Antworten

25

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 ...

  1. false
  2. undefined
  3. null
  4. ""
  5. NaN
  6. 0

Alles sonst gilt als truthy.

Also wird Ihr Ausdruck als ...

bewertet %Vor%

Oder Sie könnten es so sehen:

%Vor%     
5 revsuser1106925 23.12.2011, 15:04
quelle
5

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.

    
Ernest Friedman-Hill 20.12.2011 15:52
quelle
3

Der Code a || b ist ungefähr gleichbedeutend mit a ? a : b oder diesem etwas ausführlicheren Code:

%Vor%

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 .

    
Mark Byers 20.12.2011 15:52
quelle
1

Die Zeichenfolge ist der erste truthy Wert in der Kette von or. Einfach.

    
Jamiec 20.12.2011 15:52
quelle
1

Weil es in der Reihenfolge von links nach rechts ausgewertet wird.

Wenn Sie dies ändern würden:

%Vor%

Deine Antwort wäre 12.

    
John Hartsock 20.12.2011 15:52
quelle
0

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.

    
techfoobar 20.12.2011 15:55
quelle

Tags und Links