Heim > Artikel > Web-Frontend > Lösung des Problems, warum [1,2] + [3,4] in JavaScript nicht gleich [1,2,3,4] ist
Ich möchte ein Array an ein anderes Array anhängen, also habe ich den folgenden Code in Firebug geschrieben:
[1,2] + [3,4]
Aber unerwartet , es wird ausgegeben:
"1,23,4"
, aber nicht das, was ich erwartet habe:
[1,2,3,4]
Der +-Operator von JavaScript hat zwei Zwecke:
Zwei Zahlen hinzufügen;
Die beiden Zeichenfolgen verketten.
Die Spezifikation definiert nicht das Verhalten des +-Operators für Arrays, daher konvertiert JavaScript zuerst das Array in einen String und führt dann die +-Operation für den String aus.
Wenn Sie zwei Arrays verketten möchten, können Sie die Concat-Methode des Arrays verwenden:
[1, 2].concat([3, 4]) // [1, 2, 3, 4]
JavaScript verfügt über 6 integrierte Datentypen: (Anmerkung: Aus dem angegebenen Link geht hervor, dass der ursprüngliche Autor die Datentypen des ursprünglichen Typsystems meinen sollte. JavaScript verfügt tatsächlich über zwei Typsysteme. Das erste Typsystem wird verwendet <code><strong><span style="color: #ff0000;">typeof</span></strong>
typeofinstanceof
wird als primitives Typsystem bezeichnet, und das zweite Typsystem wird darauf basierend entwickelt vom Objekttyp, also dem Objekttypsystem, wird durch
Es ist zu beachten, dass null
<strong><span style="color: #ff0000;">[]</span></strong>
und [] sind zwei völlig unterschiedliche Typen. Bei Verwendung von <code><strong><span style="color: #ff0000;">typeof</span></strong> object
typeof
+
数组不是基本类型
zurück. Bei Verwendung des -Operators ist die Funktionsweise in diesen beiden Fällen jedoch unterschiedlich. In JavaScript, Array
, ist seine Existenz nur eine beschönigte Syntax, es ist tatsächlich function
Instanz der Klasse. (ps: Function
ist eigentlich die mit Zucker überzogene Syntax der Klasseninstanz javascript
new Number(5)
.) Wenn Sie sagen: Jetzt, da Ihr Kopf noch klar ist, ist es an der Zeit, etwas Aufregung hinzuzufügen. Objekt-Wrapper-Typen für wie new Boolean(true)
<strong><span style="color: #ff0000;">new String("abc")</span></strong>
object
, Number
Boolean
und <span style="color: #ff0000;"><code>Number
new String("abc") sind ebenfalls vom Typ , es handelt sich nicht um Zahlen, Boolesche Werte oder Zeichenfolgen. Allerdings repräsentieren die arithmetischen Operatoren und Boolean
Zahlen. Erinnern Sie sich an den +-Operator, den ich zuvor erwähnt habe? Seine Operationsobjekte sind Zahlen und Zeichenfolgen, das heißt String
, number
, boolean
oder string
,
---------------------------------------------------------------------------------------- | undefined | boolean | number | string | function | object | null | array ---------------------------------------------------------------------------------------- undefined | number | number | number | string | string | string | number | string boolean | number | number | number | string | string | string | number | string number | number | number | number | string | string | string | number | string string | string | string | string | string | string | string | string | string function | string | string | string | string | string | string | string | string object | string | string | string | string | string | string | string | string null | number | number | number | string | string | string | number | string array | string | string | string | string | string | string | string | string -------------------------------------------------------------------------------------------
,
.
Die folgende Tabelle zeigt den Ergebnistyp, der erhalten wird, nachdem der Operator + auf verschiedene Typen angewendet wird.var o = { valueOf : function () { return 4; } };Diese Tabelle gilt für Chrome 13, Firefox 6, Opera 11 und IE9. Hausaufgabe: Überprüfen Sie die Kompatibilität anderer Browser. Hinweis: + Operationen an benutzerdefinierten Objekten führen möglicherweise nicht immer zu einem Zeichenfolgenergebnis. Dies hängt hauptsächlich davon ab, wie die Konvertierung des Objekttyps in den nativen Typ implementiert wird. Zum Beispiel: Die Berechnung von o + 2 ergibt 6, was eine Zahl ist; die Berechnung von o + '2' ergibt '42', was eine Zeichenfolge ist.
Das obige ist der detaillierte Inhalt vonLösung des Problems, warum [1,2] + [3,4] in JavaScript nicht gleich [1,2,3,4] ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!