961 Stimmen

Was ist der Unterschied zwischen "Array()" und "[]" bei der Deklaration eines JavaScript-Arrays?

Was ist der wirkliche Unterschied zwischen der Deklaration eines Arrays wie diesem:

var myArray = new Array();

y

var myArray = [];

2 Stimmen

[] Token: ARRAY_INIT ; new Array Spielsteine: NEW, IDENTIFIER ; new Array() Spielsteine: NEW, IDENTIFIER, CALL

8voto

Bogdan Gusiev Punkte 7717

Der erste ist der Standardaufruf des Objektkonstruktors. Sie können seine Parameter verwenden, wenn Sie wollen.

var array = new Array(5); //initialize with default length 5

Die zweite gibt Ihnen die Möglichkeit, ein nicht leeres Array zu erstellen:

var array = [1, 2, 3]; // this array will contain numbers 1, 2, 3.

1 Stimmen

Sie können dasselbe mit dem ausführlichen Konstruktor tun: var array = new Array(1, 2, 3);

0 Stimmen

Dann können Sie also Folgendes tun var array = [5] unter Verwendung der eckigen Klammern, aber nicht unter Verwendung des Konstruktors als var array = Array(5) erzeugt ein leeres Array mit 5 Elementen.

0 Stimmen

Cdmckay - das ist falsch. var a=[5] wäre ein Array mit einem einzigen Element - der Zahl fünf.

8voto

Peter Lee Punkte 12165

Zum besseren Verständnis [] y new Array() :

> []
  []
> new Array()
  []
> [] == []
  false
> [] === []
  false
> new Array() == new Array()
  false
> new Array() === new Array()
  false
> typeof ([])
  "object"
> typeof (new Array())
  "object"
> [] === new Array()
  false
> [] == new Array()
  false

Das obige Ergebnis stammt von der Google Chrome-Konsole unter Windows 7.

4 Stimmen

Aber warum ist [] == [] oder [] === [] falsch?

5 Stimmen

"Ein Ausdruck, der Objekte vergleicht, ist nur wahr, wenn die Operanden auf dasselbe Objekt verweisen." (Quelle: developer.mozilla.org/de-US/docs/Web/JavaScript/Reference/ )

1 Stimmen

In dieser Antwort werden Beispiele herausgegriffen, um zu suggerieren, dass die beiden Konstrukte identisch sind. Andere Beiträge auf dieser Seite weisen auf die Unterschiede hin, z. B. Array(3) o new Array(3) ist nicht dasselbe wie [3] .

5voto

Kholio Punkte 301

Ich kann das anhand dieses Beispiels, das auf Fredriks gutem Beispiel basiert, etwas genauer erklären.

var test1 = [];
test1.push("value");
test1.push("value2");

var test2 = new Array();
test2.push("value");
test2.push("value2");

alert(test1);
alert(test2);
alert(test1 == test2);
alert(test1.value == test2.value);

Ich habe gerade einen weiteren Wert zu den Arrays hinzugefügt und vier Warnungen erstellt: Der erste und der zweite geben uns den Wert, der in jedem Array gespeichert ist, damit wir sicher sein können, dass die Werte übereinstimmen. Sie werden dasselbe zurückgeben! Versuchen Sie nun die dritte, sie gibt falsch zurück, weil

JS-Leckereien test1 als VARIABLE mit einem Datentyp von array und es behandelt test2 als OBJECT mit der Funktionalität eines Arrays und hier gibt es nur geringe Unterschiede.

Der erste Unterschied besteht darin, dass test1 eine Variable aufruft, ohne zu denken. Es gibt einfach die Werte zurück, die in dieser Variable gespeichert sind, ohne Rücksicht auf ihren Datentyp! Aber wenn wir test2 aufrufen, ruft es die Array() Funktion und speichert dann unsere "Gedrängt" Werte in seinem "Wert" Eigenschaft, und dasselbe passiert, wenn wir test2 alarmieren, es gibt die "Wert" Eigenschaft des Array-Objekts.

Wenn wir also prüfen, ob test1 gleich test2 ist, werden sie natürlich niemals true zurückgeben, da die eine eine Funktion und die andere eine Variable (mit dem Typ Array) ist, selbst wenn sie den gleichen Wert haben!

Um sicher zu sein, probieren Sie den 4. Alert aus, dem Sie .value hinzufügen; er wird true zurückgeben. In diesem Fall sagen wir JS: "Ungeachtet des Typs des Containers, ob es sich um eine Funktion oder eine Variable handelt, vergleiche bitte die Werte, die in den einzelnen Containern gespeichert sind, und sag uns, was du gesehen hast!", und genau das passiert.

Ich hoffe, ich habe die Idee dahinter klar ausgedrückt, und entschuldige mich für mein schlechtes Englisch.

19 Stimmen

Es ist erstaunlich, dass so ein kompletter und völliger Unsinn gewählt wurde. Der Vergleich zwischen den Arrays wird falsch sein, egal wie man sie macht, weil er die Objektidentität vergleicht und es sind unterschiedliche Objekte. Arrays haben keine Werteigenschaft. [] y new Array() ist identisch; .value wird sein undefined in beiden Fällen, und ein Vergleich wird immer falsch sein.

0 Stimmen

Einverstanden, diese Antwort macht keinen Sinn und zeigt nichts. Es gibt nicht so etwas wie array.value . und beide typeof [] y typeof new Array() return object . Das ist einer der Gründe, warum es eine Funktion namens Array.isArray

0 Stimmen

Also Leute, ich stimme euch zu :) Ich habe damals einen völligen Blödsinn geschrieben :). Jetzt habe ich die richtige Antwort auf dieselbe Frage hinzugefügt. Lasst mich wissen, was ihr seht. Ich schätze eure Meinungen sehr.

4voto

Solo Punkte 6085

Es steckt mehr dahinter, als man auf den ersten Blick sieht. Die meisten anderen Antworten sind richtig ABER AUCH ..

new Array(n)

  • Ermöglicht dem Motor die Neuzuweisung von Speicherplatz für n Elemente
  • Optimiert für Array Erstellung
  • Das erstellte Array wird markiert spärlich die die am wenigsten performanten Array-Operationen hat, weil jeder Index-Zugriff die Grenzen prüfen muss, um zu sehen, ob der Wert existiert und die Prototypenkette ablaufen
  • Wenn Array als sparse markiert ist, gibt es keinen Weg zurück (zumindest in V8), es wird immer langsamer während seiner Lebensdauer sein, auch wenn Sie es mit Inhalt (gepackte Array) 1ms oder 2 Stunden später füllen, spielt keine Rolle

[1, 2, 3] || []

  • Das erstellte Array wird markiert verpackt (es sei denn, Sie verwenden delete o [1,,3] Syntax)
  • Optimiert für Array Operationen ( for .. , forEach , map , usw.)
  • Der Motor muss den Speicherplatz neu zuweisen, wenn das Array wächst.

Ce site wahrscheinlich ist bei älteren Browser-Versionen/Browsern nicht der Fall.

4voto

Aniruddha Punkte 3354

Es gibt keinen Unterschied, wenn Sie Array ohne jegliche Länge initialisieren. Also var a = [] & var b = new Array() ist gleich.

Wenn Sie aber ein Array mit einer Länge initialisieren wie var b = new Array(1); wird die Länge des Array-Objekts auf 1 gesetzt, was also gleichbedeutend ist mit var b = []; b.length=1; .

Dies wird problematisch sein, wenn Sie array_object.push tun, es Element nach dem letzten Element hinzufügen & Länge erhöhen.

var b = new Array(1);
b.push("hello world");
console.log(b.length); // print 2

gegen

var v = [];
a.push("hello world");
console.log(b.length); // print 1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X