English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Die Vergleichs- und Konvertierungsregeln zwischen verschiedenen Datentypen in JavaScript lauten wie folgt:
1. Vergleich von Objekten und Boolean-Werten
Wenn ein Objekt mit einem Boolean-Wert verglichen wird, wird das Objekt zuerst in einen String umgewandelt, dann in eine Zahl und der Boolean-Wert wird direkt in eine Zahl umgewandelt.
]] == true; //false [] wird in einen String '' umgewandelt, dann in die Zahl 0, true wird in die Zahl umgewandelt1]] also falsch
2. Vergleich Objekt und String
Wenn ein Objekt mit einem String verglichen wird, wird das Objekt in einen String umgewandelt und dann beide verglichen.
]]1,2,3]] == '1,2,3'' // true [1,2,3]]' wird in '1,2,3]] dann und '1,2,3]] so das Ergebnis ist true;
3. Vergleich Objekt und Zahl
Wenn ein Objekt mit einer Zahl verglichen wird, wird das Objekt zuerst in einen String umgewandelt, dann in eine Zahl und schließlich mit der Zahl verglichen.
]]1]] === 1; // true Der Objekt wird zuerst in einen String umgewandelt und dann in eine Zahl umgewandelt, beide werden verglichen [1]]' =>1'' => 1 Das Ergebnis ist true
4. Vergleich String und Zahl
Wenn ein String mit einer Zahl verglichen wird, wird der String in eine Zahl umgewandelt und dann verglichen.
''1'' === 1 // true
5. Vergleich String und Boolean-Wert
Wenn ein String mit einem Boolean-Wert verglichen wird, werden beide in numerische Werte umgewandelt und dann verglichen.
''1'' === true; // true
6. Vergleich Boolean-Wert und Zahl
Wenn ein Boolean-Wert mit einer Zahl verglichen wird, wird der Boolean-Wert in eine Zahl umgewandelt und dann verglichen.
true === 1 // true
Viele, die JavaScript erst kennen lernen, sind verwirrt, wenn sie so viele Konvertierungsregeln sehen, aber das Muster ist einfach, man kann sich das folgende Diagramm merken
Wie im Bild gezeigt, wird bei der Vergleich von beliebigen zwei Typen, wenn sie nicht denselben Typ sind, entsprechend auf die Weise umgewandelt, wie im Bild gezeigt, z.B. wenn ein Objekt und ein Boolean-Wert verglichen werden, wird das Objekt in einen String umgewandelt und dann in einen numerischen Wert, der Boolean-Wert wird direkt in einen numerischen Wert umgewandelt.
Außerdem schauen wir uns einige Dinge an, die "besonders gepflegt" werden müssen.
Sehen wir uns ein interessantes Problem an
[] == false; ![] == false;
Die Ergebnisse sind beide true, der erste ist, Objekt => String => numerischer Wert 0 false wird in die Zahl 0 umgewandelt, das sollte kein Problem sein,
Wenn vor dem zweiten ein ! hinzugefügt wird, wird direkt in einen Boolean-Wert umgewandelt und invertiert, bei der Umwandlung in einen Boolean-Wert sind für leere Strings (''), NaN, 0, null, undefined diese Werte alle true, daher ! [] ergibt true, der Invertierung entspricht false, daher [] == false ergibt true.
Es gibt noch einige Dinge zu beachten, wie:
undefined == null //true undefined und null vergleichen ergibt true, beide mit anderen Werten vergleichen ergibt false Number(null) //0
Ich habe einmal einen solchen Code gesehen: (!(~+]]+)}[--[~+"[+]]*[~+]]+~~!+]]+{+]]!+*~+[]]] = sb, kannst du glauben, als ich es zum ersten Mal sah, hat es mich sehr erschrocken.
Als Anfänger war mir Js sehr verwirrend, genau wegen seiner 'Veränderlichkeit'. Hier fasse ich zusammen:
7. JS-Datentypen: Number, Boolean, String, Undefined, Null, Symbol (es6Neu definierte) und Object (Anmerkung: Array ist ein spezieller Object)
typeof gibt zurück:7Typen: number boolean string object undefined object function
MDN beschreibt JavaScript so: JavaScript ist eine schwach typisierte oder dynamische Sprache. Dies bedeutet, dass Sie die Typen von Variablen nicht vorab deklarieren müssen und die Typen während der Laufzeit automatisch bestimmt werden. Dies bedeutet auch, dass Sie denselben Variablen verschiedene Typen von Daten zuweisen können
8. Hier sind einige häufige implizite Konvertierungen:
Basistypen:
Operator (+,-,*,/,%) Umwandlung der Typen
„+„ Zeichensatzoperator :
Zusammenfassung: Bei Plus-Operatoren werden String und andere Typen in String umgewandelt; in anderen Fällen werden alle in Number-Typen umgewandelt, Anmerkung: undefined wird in Number umgewandelt zu 'NaN' und jede Addition von Number mit NaN ergibt NaN.
Bei anderen Operatoren werden Basistypen in Number umgewandelt, wie z.B. String-Typen mit Zeichen: '1a' ,'a1' wird in NaN umgewandelt, wie undefined.
tip:(1) NaN ist mit keinem Wert gleich, einschließlich sich selbst, daher kann ein Wert als NaN bestimmt werden, indem "!==" verwendet wird.
(2) Umgewandelt in Boolean-Typen mit false sind: null, 0, '', undefined, NaN, false
(3)number() und parseInt() können Objekte in den Number-Typ umwandeln, die Number-Funktion ist viel strenger als die parseInt-Funktion. Grundsätzlich wird eine entire Zeichenkette zu NaN umgewandelt, wenn ein Zeichen nicht in eine Zahl umgewandelt werden kann.
Objekttyp
Wenn object mit Basistypen berechnet wird:
var obj = { toString: function(){ return 6; }, valueOf: function(){ return 5; } }; var obj1 = { valueOf: function(){ return 'a'; }, toString: function(){ return 'b'; } };
Wenn auf obj,obj1 Während der Umwandlung mit Number() und String()
Zusammenfassung: Der Number-Typ ruft zuerst valueOf() auf, der String-Typ ruft zuerst toString() auf. Wenn das Ergebnis ein ursprünglicher Wert ist, wird dieser zurückgegeben. Andernfalls wird mit toString oder valueOf() fortgesetzt, bis ein ursprünglicher Wert zurückgegeben wird. Wenn das Ergebnis immer noch kein ursprünglicher Wert ist, wird ein Typfehler ausgelöst;
Sehen Sie sich die folgenden Beispiele an:
Warum {} + [] = 0 ? Da JavaScript bei der Ausführung den ersten {} als leeren Codeblock erkennt, ist das gleichbedeutend mit +[] = 0. Und {} +5 = 5, ähnlich.
Zusammenfassung:
1. Typfehler können möglicherweise durch Typkonvertierungen versteckt werden.
2. „+“” kann sowohl Zeichenkettenverbindung als auch arithmetisches Plus darstellen, abhängig von den Operanden. Wenn einer davon eine Zeichenkette ist, dann ist es eine Zeichenkettenverbindung.
3. Objekte konvertieren sich durch die valueOf-Methode in eine Zahl und durch die toString-Methode in eine Zeichenkette.
4. Objekte mit dem valueOf-Methode sollten eine entsprechende toString-Methode definieren, um die Zeichenkette der gleichen Zahl zurückzugeben.
5. Beim Überprüfen nicht definiierter Variablen sollte typeOf oder eine Vergleichung mit undefined verwendet werden, anstatt direkt wahrheitswertige Operationen durchzuführen.
Zusammenfassung
Die in diesem Artikel erwähnten impliziten Konvertierungen und Zusammenfassungen (Empfehlung) in JavaScript, die ich Ihnen vorgestellt habe, hoffe ich, helfen Ihnen weiter. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht, ich werde Ihnen umgehend antworten. Ich danke auch sehr für Ihre Unterstützung für die Anleitung!
Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrechtlichem Inhaber. Der Inhalt wurde von Internetbenutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie verdächtige urheberrechtliche Inhalte finden, senden Sie bitte eine E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @, wenn Sie eine Beschwerde einreichen, und fügen Sie relevante Beweise bei. Sobald nachgewiesen, wird diese Website den verdächtigen Inhalt sofort löschen.)