Was genau ist Typ Coercion in Javascript?
Was genau ist die Typumwandlung in Javascript?
Beispielsweise auf die Verwendung von ==
statt ===
?
Kommentar zu dem Problem
(true == 1) => true
/ (true === 1) => false
. @VisioN ist Ihr Kommentar überhaupt nicht helfen, ich Frage: "warum" ist das passiert?
Es passiert so, weil JavaScript wurde in dieser Weise entwickelt. Mein Kommentar sollte die Antwort auf Ihre wichtigste Frage: Was genau ist eine Typumwandlung in Javascript?
Über YDJS: "die Umwandlung einen Wert von einem Typ in einen anderen Typ wird oft als "type-casting", wenn explizit gemacht, und "Nötigung", wenn Sie fertig implizit (gezwungen durch die Regeln, wie ein Wert genutzt wird)." - github.com/getify/You-Dont-Know-JS/blob/master/...
InformationsquelleAutor der Frage gespinha | 2013-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Art Zwang bedeutet, dass, wenn die Operanden eines operators verschiedene Typen, einer von Ihnen wird in einen "entsprechenden" Wert des anderen Operanden - Typ. Zum Beispiel, wenn Sie tun:
den boolean-operand wird in eine Ganzzahl konvertiert:
false
wird0
,true
wird 1. Dann werden die beiden Werte verglichen werden.Jedoch, wenn Sie die non-converting-Vergleichsoperator
===
keine solche Umwandlung tritt. Wenn die Operanden unterschiedliche Typen, dieser operator gibtfalse
, und nur vergleicht die Werte, wenn Sie vom gleichen Typ sind.InformationsquelleAutor der Antwort Barmar
Beginnen wir mit einem kurzen intro, um solche Systeme, die ich denke, wird Ihnen helfen, die Allgemeine Vorstellung von der Art Zwang.
Den Typ system einer Sprache definiert die Regeln, die uns sagen, welche Arten von Daten gibt es in dieser Sprache und wie können Sie kombiniert werden mit verschiedenen Operatoren. Zum Beispiel, eine solche Regel könnte festlegen, dass die plus - ( + ) - operator wirkt nur auf die zahlen. Diese Regeln existieren in Erster Linie zu verhindern, dass Sie Schießen sich in den Fuß. Aber was passiert, wenn der Programmierer breaks, die in der Regel in den Programm? Es gibt nichts verhindern, den Programmierer von der Eingabe
{} + {}
oder“hello” + 5
im Programm, auch wenn die Sprache nicht denke, dass diese Ausdrücke keinen Sinn.Was letztendlich passiert in diesen Situationen hängt davon ab, wie streng die Sprache ist über seine Art Regeln.
Ein-Sprachen-Typ-system Häufig hält einer der beiden Positionen über Sie brechen seine Regeln:
Sprachen mit Typ-Systeme, nehmen Sie die erste position, die über seine Regeln sind umgangssprachlich auch als "stark typisiert" Sprachen. Sie sind streng, was Sie nicht lassen, Sie brechen seine Regeln. Diejenigen, die den zweiten Ansatz (wie z.B. JavaScript) sind bezeichnet als "schwach typisiert" oder "schwach typisierte" Sprachen. Sicher, man kann die Regeln brechen, aber nicht überrascht sein, wenn er wandelt den Datentyp, den Sie beschrieben in Ihrem Programm mit Gewalt zur Einhaltung seiner Regeln. Dieses Verhalten ist bekannt als ... (Trommelwirbel) ... Art Zwang.
Nun schauen wir uns einige Beispiele in JavaScript. Erste, beginnen wir mit einem Ausdruck, führt nicht zu einer Art Zwang.
Mithilfe der + - operator zwei zahlen, die durchaus gültig ist. Das Programm behandelt + meine "hinzufügen" und fröhlich fügen Sie die beiden zahlen. Es ist keine Konvertierung erforderlich.
Aber was ist ...
Uh oh. In JavaScript
+
bedeuten kann, fügen Sie zwei zahlen oder zwei strings verketten. In diesem Fall haben wir weder die beiden zahlen noch zwei Saiten. Wir haben nur eine Zahl und ein Objekt. Nach JavaScript ist Typ Regeln, das macht keinen logischen Sinn. Da es nachsichtig über Sie brechen seine Regeln, stattdessen stürzt er versucht, Sinn zu machen es trotzdem. So, was hat JavaScript nicht? Gut, Sie weiß, wie Sie strings verketten, also er wandelt die beiden [] und 5 in die Saiten und das Ergebnis ist ein string mit dem Wert "5".Was ist der deal mit den Vergleichsoperatoren
==
und===
? Warum gibt es zwei Vergleichsoperatoren?==
ist nicht immun gegen JavaScript-type-conversion-Verhalten. Ausdrücke wie5 == “5”
wird zu true ausgewertet, da JavaScript wird versuchen, zu konvertieren, eine von Ihnen, so dass es den Vergleich die gleiche Art von Daten.In vielen Fällen, das ist nicht wünschenswert, weil Sie wollen wahrscheinlich wissen, wenn Sie einige Daten, die Sie vergleichen, gegen die ist von einem anderen Typ, so dass Sie entscheiden können, was zu tun ist. Das ist, wo die
===
Betreiber kommt. Wenn Sie===
keine Typ-Konvertierung statt. Daher ist der Ausdruck5 === “5”
wird zu false ausgewertet.InformationsquelleAutor der Antwort linstantnoodles
In Python, wenn Sie versuchen, hinzufügen, sagen, strings und zahlen, erhalten Sie eine Fehlermeldung:
Doch in JavaScript, müssen Sie nicht. Die
10
wird in einen string umgewandelt:"Art Zwang" ist nur ein schicker falsche Bezeichnung für die oben genannten. In Wirklichkeit ist weder die Sprache hat "Arten" im Sinne von Java, C oder anderen Sprachen mit statischer Systeme. Wie die Sprachen, die Behandlung der Wechselwirkungen zwischen den verschiedenen nicht-statisch typisierte Werte ist eine Frage der Wahl und der Konvention.
InformationsquelleAutor der Antwort Claudiu
a == b
bedeutet javascript auswertena
gegenb
basierend darauf, ob die Werte, die ausgewertet werden können, ebenso. Zum Beispielfalse == 0
bewerten wird wahr, denn 0 ist auch der Wert des booleschen Wert "false". Allerdingsfalse === 0
bewerten falsch, weil streng zu vergleichen ist, ist 0 nicht der gleiche physikalische Wert als false. Ein weiteres Beispiel istfalse == ''
Also im Grunde Locker-Vergleich vs. strengen Vergleich, denn javascript ist eine lose typisierte Sprache. Das heißt, javascript wird versuchen, zu konvertieren, die variable, basierend auf dem Kontext des Codes, und dies hat den Effekt, dass Dinge gleich, wenn Sie sind nicht streng im Vergleich. php hat auch dieses Verhalten.InformationsquelleAutor der Antwort Crayon Violent
lassen Sie mich erklären, Typumwandlung mit dem folgenden Beispiel
Art Zwang bedeutet, dass Javascript automatisch (on-the-fly) wandelt eine variable von einem Datentyp zu einem anderen
Ex:
123 + "4"
in der Regel löst einen Fehler aus, aber in Javascript aufgrund der Art Zwang, es Ergebnisse in1234
einen stringIn dem obigen code, denn der Typ Zwang - JavaScript denkt
23
(Anzahl)"23"
(string) sind die gleiche Sache. dies macht die Bedingung wahr und druckt die Konsole.melden SieIn dem anderen Fall
In
===
Fall Javascript nicht Typ Zwang, und da23
ist eine Zahl und"23"
"String", und weil der===
diese beiden Datentypen sind Verschieden, und das führt zu den falschen Zustand. Es druckt nicht die Konsole.melden SieIn einfachen Worten
In diesem Fall
=
es ist ein Zuweisungsoperator - was weist Werte wievar a = 3;
usw(unter Operatoren werden für den Vergleich)
In diesem Fall
==
Javascript konvertiert/zwingt den Datentyp zu einem anderen und dann vergleicht es.In diesem Fall
===
Javascript nicht konvertieren/zwingt den DatentypUm zu vermeiden, Fehler und debugging-Zwecken für
===
wird meist verwendet,Bitte lassen Sie mich wissen, die Richtigkeit der vorstehenden Angaben.
InformationsquelleAutor der Antwort PRasan
Beispiel von einer Variablen zunächst deklariert als string gezwungen, in boolean-Wert mit dem ! Betreiber
InformationsquelleAutor der Antwort Mister P
Wenn der Datentyp nicht identisch mit einander, dann Zwang Geschehen.
wie 3 == "3" oder boolen == integer
InformationsquelleAutor der Antwort A.S.Abir