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

2voto

Meir Elad Punkte 75

Der Unterschied bei der Verwendung von

var arr = new Array(size);

Ou

arr = [];
arr.length = size;

Wie in dieser Frage bereits ausreichend erörtert wurde.

Ich möchte die Frage der Geschwindigkeit hinzufügen - die aktuell schnellsten Weg, auf google chrome ist die zweite.

Aber Vorsicht, diese Dinge ändern sich mit den Updates häufig. Auch die Laufzeit unterscheidet sich zwischen verschiedenen Browsern.

Zum Beispiel - die 2. Option, die ich erwähnt habe, läuft mit 2 Millionen [Ops/Sekunde] auf chrome aber wenn Sie es ausprobieren würden mozilla dev. käme man auf eine überraschend hohe Quote von 23 Millionen.

Wie auch immer, ich schlage vor, dass Sie es ab und zu auf verschiedenen Browsern (und Rechnern) ausprobieren, indem Sie die Website als solche

-5voto

Mit der Array-Konstruktor macht ein neues Array der gewünschten Länge und füllt jeden der Indizes mit undefiniert, die ein Array zu einer Variable erstellt die Indizes, die Sie geben es Informationen für.

2 Stimmen

Nein, das Array ist NICHT aufgefüllt, es gibt keine Indizes/Schlüssel darin. Zum Beispiel würde .forEach nicht funktionieren.

-5voto

Bucky Punkte 71

Ich habe einen Unterschied zwischen den beiden Konstruktionen gefunden, der mich sehr gestört hat.

Sagen wir, ich habe:

function MyClass(){
  this.property1=[];
  this.property2=new Array();
};
var MyObject1=new MyClass();
var MyObject2=new MyClass();

Im wirklichen Leben, wenn ich das tue:

MyObject1.property1.push('a');
MyObject1.property2.push('b');
MyObject2.property1.push('c');
MyObject2.property2.push('d');

Das Ergebnis ist folgendes:

MyObject1.property1=['a','c']
MyObject1.property2=['b']
MyObject2.property1=['a','c']
MyObject2.property2=['d']

Ich weiß nicht, was laut Sprachspezifikation passieren soll, aber wenn ich möchte, dass meine beiden Objekte eindeutige Eigenschaftsarrays in meinen Objekten haben, muss ich new Array() .

0 Stimmen

Dieses JSFiddle zeigt, dass die Ausgabe das ist, was man mit dem Array-Literal erwarten würde [] y new Array() Konstruktor, was zu einem Element pro Array pro Eigenschaft führt. In Ihrem Code muss etwas anderes vor sich gehen, um das oben gezeigte Ergebnis zu erhalten.

0 Stimmen

Bucky, das passiert bei mir nicht, in keinem Browser. Um dieses Verhalten zu erhalten, müssten Sie etwas wie dieses tun: var property1static=[]; function MyClass(){ this.property1=property1static; this.property2=new Array(); };

0 Stimmen

Sind Sie sicher, dass Sie nicht gerade var MyObject2 = MyObject1; ?

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