Heim  >  Artikel  >  Web-Frontend  >  Lösung des Problems, warum [1,2] + [3,4] in JavaScript nicht gleich [1,2,3,4] ist

Lösung des Problems, warum [1,2] + [3,4] in JavaScript nicht gleich [1,2,3,4] ist

黄舟
黄舟Original
2017-08-10 11:02:182302Durchsuche

Problem

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]

Antwort

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]

Übersicht über den +-Operator in Javascript

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

  • )

    undefiniert identifiziert
  • Boolescher Wert
  • Zahl
  • Zeichenfolge
  • Funktion
  • Objekt

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>   objecttypeof +

Operation, alle kehren

数组不是基本类型 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 javascriptnew 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn