2009-10-07 10 views

Antwort

15

Der Operator === ist Ihr Freund. Verwenden Sie niemals den Operator ==; es wird dich beißen, wie du sehen kannst.

+9

Obwohl Ihre Antwort hilfreich ist es nicht die Frage beantworten. –

+3

Wahr. Die Werte, die "falsch" sind, sind: undefined, null, false, 0 und "". Wie Mikesamuel sagt, [] zwingt er zu "". So viel zum ersten Mal. Und eine Nicht-Null-Objektreferenz ist wahr, die die zweite beantwortet. –

10

Eine leere Liste, [] muss als "falsch" betrachtet werden, jedoch in ![] die! konvertiert dann die Operation, um nach einer Objektreferenz zu suchen, wobei ein Nicht-Null-Wert nicht als "falsch" betrachtet wird.

+5

[] ist nicht falsch. Es ist ein Nebeneffekt von String-Zwang. Das Array [''] ist auch == false, ist aber nicht falsch. –

+0

@mikesamuel danke für den Einblick! – Dave

4

Bevor [] mit false verglichen wird, wird es in eine Zeichenfolge umgewandelt, die auf eine Zahl gezwungen wird, die leere Zeichenfolge im Fall der leeren Matrix. Die leere Zeichenkette wird auf 0 gesetzt. Dies ist der gleiche Wert, der von false zu numerisch wird.

Nutzung === statt == dieses Problem

Diese anderen Anordnungen auch Falsey sind zu vermeiden:

[''] 
    [[[]]] 
    (function() { var arr = []; arr[0] = arr; })() 
    [0] 
    ['-0.0'] 
+0

Warum wird eine Liste im Vergleich zu einem booleschen Wert in eine Zeichenfolge umgewandelt? Irgendwelche Quellen? – luntain

+0

Aus Abschnitt 11.9.3 von EcmaScript 262: 18. Wenn Type (x) Boolean ist, geben Sie das Ergebnis des Vergleichs ToNumber (x) == y zurück. 19. Wenn Type (y) Boolean ist, gebe das Ergebnis des Vergleichs x == ToNumber (y) zurück. Wenn Sie dann ein Array zu einer Zahl zwingen, müssen Sie diese zuerst auf eine Zeichenkette anwenden und dann diese Zeichenkette auf eine Zahl anwenden. Für die meisten Arrays wird dies den nicht vergleichbaren Wert NaN ergeben, aber für einige Arrays [], [0], [[0]], ['0.0'] usw. werden sie wahrheitsgemäß mit falsch vergleichen. Sie können mit dem Zwangsverhalten experimentieren, indem Sie (+ [0]) usw. auswerten. –

Verwandte Themen