JavaScript type casting
Betrachten leere JavaScript-array:
var a = [];
alert(a == false); //shows true
alert(!a); //shows false!
Wie ist das zu erklären?
Was sind die Regeln?
möglich, Duplikat der Warum tun alert(!!"0") und Alarm(false == "0") sowohl die Ausgabe true in JavaScript
Danke für den Hinweis. Aber nicht genau, ich bitte um generische Regeln.
Wenn es um die lose
Oder, wenn Sie möchten, die Dinge einfach zu halten, Sie nur vermeiden, geben Sie Zwang zusammen. Möglicherweise gibt es einige gute Anwendungsfälle für die Nötigung (
siehe auch: stackoverflow.com/questions/24318654
Danke für den Hinweis. Aber nicht genau, ich bitte um generische Regeln.
Wenn es um die lose
==
Betreiber, die Regeln sind nicht so generisch. Lesen Sie über die Abstrakte Gleichheit Vergleich Algorithmus verwiesen wird, die von der Antwort.Oder, wenn Sie möchten, die Dinge einfach zu halten, Sie nur vermeiden, geben Sie Zwang zusammen. Möglicherweise gibt es einige gute Anwendungsfälle für die Nötigung (
==
), sondern als eine Allgemeine Regel, die Sie können, vermeiden Sie es einfach (===
). Und dann, auf die Sie bauen können, dass die Regel, und Ausnahmen hinzufügen, wo Sie wollen, zu zwingen.siehe auch: stackoverflow.com/questions/24318654
InformationsquelleAutor Evgenyt | 2011-01-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom http://forums.whirlpool.net.au/archive/966449:
a == false
:In diesem Fall den Typ der linken Seite ist Objekt, der Typ von der rechten Seite ist boolean. Javascript ersten konvertiert den booleschen einer Reihe, was
0
. Dann konvertiert das Objekt in eine "primitive", woraus sich die leere Zeichenfolge. Weiter vergleicht er die leere Zeichenfolge zu0
. Der leere string wird in eine Zahl umgewandelt, was0
, die numerisch gleich der0
auf der rechten Seite, damit das Ergebnis des gesamten Ausdrucks isttrue
.Siehe §11.9.3 der ECMAScript-Spezifikationen für alle die blutigen details.
(!a)
:In diesem Fall Javascript konvertiert das Objekt den booleschen Wert true, dann kehrt es, die in false.
InformationsquelleAutor Ryan Li
Den
!
- operator überprüft, ob der operand ist "falsy".Folgende Bedingungen erfüllt sind:
!false
!0
!null
!NaN
!undefined
!""
Den
==
operator prüft, für lose Gleichheit, die hat nichts zu tun mit falsiness.Insbesondere
a == b
konvertieren Operanden zahlen sind, dann vergleichen Sie die zahlen.Strings mit zahlen zu konvertieren, um die zahlen, die Sie enthalten; Boolesche Werte zu konvertieren
0
und1
.Objekte konvertiert werden, durch aufrufen von
valueOf
, wenn Sie definiert ist.So, die alle der folgenden Bedingungen erfüllt sind:
"1" == 1
"0" == false
"1" == true
"2" != true
"2" != false
({ valueOf:function() { return 2; } }) == 2
({ valueOf:function() { return 1; } }) == true
Der gleichen Weise, dass
2 != 3
und2 != 4
sind beide wahrAch da false == Zahl(0), true == Zahl(1) . Habe es Dank
InformationsquelleAutor SLaks
Den
==
operator, wenn einer der Operanden, wenn ein Boolean-Typ konvertiert, der andere Zahl.Ist äquivalent zu:
Können Sie die vollständigen details der Abstract Equality Comparison Algorithm auf die Spezifikation.
Wie Sie sehen können, wird ein leeres array-Objekt umgewandelt, um die Nummer, produziert
0
:Diese ist wirklich, weil die toString-Methode erzeugt eine leere Zeichenfolge, zum Beispiel:
InformationsquelleAutor CMS
Beim Vergleich eines Objekts in einen primitiven Wert über die
==
Betreiber, das Objekt zwingt, in einen primitiven Wert (Zahl oder string). In diesem Fall[]
zwingt in0
, dannfalse
zwingt in0
:wahr ist.
Den
!
Betreiber zwingt, in boolean und dann kehrt der Wert.[]
in boolean isttrue
(wie jedes andere Objekt). Kehren Sie dann zufalse
InformationsquelleAutor Šime Vidas
Nicht sicher, ob dies beantwortet die Frage, aber es ist eine neue Bibliothek für die Fortbewegung alle Javascript, Typisierung weirdnesses:
Typecast.js
In einem Satz Festgelegten löst einfache Probleme, so können Sie konzentrieren auf die großen. Typecast-fixes was ist falsch mit Javascript, von der Erstellung einer kompletten Plattform für die stark typisierten Variablen in Javascript.
InformationsquelleAutor BishopZ