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

3voto

Kholio Punkte 301

Nun, var x = new Array() ist anders als var x = [] unterscheidet sich in einigen Funktionen, von denen ich hier nur die beiden (meiner Meinung nach) nützlichsten erläutern möchte.

Bevor ich auf die Unterschiede eingehe, möchte ich zunächst eine Grundlage schaffen; wenn wir die x = [] definiert eine neue Variable mit dem Datentyp Array und erbt alle Methoden, die zum Array-Prototyp gehören, was der Erweiterung einer Klasse ziemlich ähnlich ist (aber nicht genau). Allerdings, wenn wir x = new Array() wird ein Klon des Array-Prototyps erzeugt, der der Variablen x .

Nun wollen wir sehen, was die Unterschiede sind

Der erste Unterschied ist die Verwendung von new Array(x) donde x eine ganze Zahl ist, initilisiert ein Array von x undefinierte Werte, zum Beispiel new Array(16) initialisiert ein Array mit 16 Elementen, von denen alle undefiniert sind. Dies ist sehr nützlich, wenn Sie asynchron ein Array mit einer vordefinierten Länge füllen. Angenommen, Sie erhalten die Ergebnisse von 100 Teilnehmern und empfangen diese asynchron von einem entfernten System oder einer Datenbank, dann müssen Sie sie dem Array entsprechend dem Rang zuordnen, sobald Sie jedes Ergebnis erhalten haben. In diesem sehr seltenen Fall werden Sie etwas tun wie myArray[result.rank - 1] = result.name Der Rang 1 wird also auf den Index 0 gesetzt und so weiter.

Der zweite Unterschied ist die Verwendung von new Array() wie Sie bereits wissen, instanziiert einen ganz neuen Klon des Array-Prototyps und weist ihn Ihrer Variablen zu, was Ihnen erlaubt, etwas Magie zu tun (nicht empfohlen btw). Diese Magie besteht darin, dass Sie eine bestimmte Methode der Legacy-Array-Methoden überschreiben können. So können Sie zum Beispiel die Array.push Methode, um den neuen Wert an den Anfang des Arrays statt an das Ende zu schieben, und Sie können auch neue Methoden (das ist besser) zu diesem speziellen Klon des Array-Prototyps hinzufügen. So können Sie in Ihrem Projekt komplexere Arten von Arrays mit Ihren eigenen zusätzlichen Methoden definieren und als Klasse verwenden.

Und noch etwas: Wenn Sie zu den wenigen Menschen gehören (die ich wirklich liebe), die sich um den Verarbeitungsaufwand und den Speicherverbrauch Ihrer Anwendung kümmern, dann würden Sie niemals new Array() ohne verzweifelt zu sein, es zu benutzen :).

Ich hoffe, das hat genug über das Biest erklärt new Array() :)

3voto

Parth Raval Punkte 3571

Der erste ist der Standardaufruf des Objektkonstruktors, der meist für dynamische Werte verwendet wird.

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

das zweite Array wird bei der Erstellung statischer Werte verwendet

var array = [red, green, blue, yellow, white]; // this array will contain values.

2voto

sammy Punkte 407

Wie ich weiß, kann der Unterschied u finden die Scheibe (oder die anderen funcitons von Array) wie code1 .und code2 zeigen u Array und seine Instanzen :

code1:

[].slice; // find slice here
var arr = new Array();
arr.slice // find slice here
Array.prototype.slice // find slice here

code2:

[].__proto__ == Array.prototype; // true
var arr = new Array();
arr.__proto__ == Array.prototype; // true

Schlussfolgerung:

wie Sie sehen können [] y new Array() eine neue Instanz von Array erstellen, und sie alle erhalten die Prototyp-Funktionen von Array.prototype

Sie sind nur verschiedene Instanzen von Array. Das erklärt, warum [] != []

)

2voto

Alireza Punkte 92209

Es gibt keinen großen Unterschied, sie tun im Grunde das Gleiche, aber auf unterschiedliche Weise, aber lesen Sie weiter, schauen Sie sich diese Erklärung des W3C an:

var cars = ["Saab", "Volvo","BMW"];

y

var cars = new Array("Saab", "Volvo", "BMW");

Die beiden obigen Beispiele tun genau das Gleiche. Es besteht keine Notwendigkeit zur Verwendung von new Array() zu verwenden.
Der Einfachheit, Lesbarkeit und Ausführungsgeschwindigkeit halber sollten Sie die erste (die Array-Literal-Methode).

Gleichzeitig wird aber auch ein neues Array mit new Array Syntax als eine schlechte Praxis angesehen:

Vermeiden Sie new Array()

Es besteht keine Notwendigkeit, den in JavaScript eingebauten Array-Konstruktor zu verwenden new Array().
Verwenden Sie stattdessen [].
Diese beiden unterschiedlichen Anweisungen erzeugen beide ein neues leeres Array namens Punkte:

var points = new Array();         // Bad
var points = [];                  // Good 

Diese beiden unterschiedlichen Anweisungen erstellen beide ein neues Array mit 6 Zahlen:

var points = new Array(40, 100, 1, 5, 25, 10); // Bad    
var points = [40, 100, 1, 5, 25, 10];          // Good

Le site neu Schlüsselwort verkompliziert den Code nur. Es kann auch zu einigen unerwartete Ergebnisse bringen:

var points = new Array(40, 100);  // Creates an array with two elements (40 and 100)

Was passiert, wenn ich eines der Elemente entferne?

var points = new Array(40);       // Creates an array with 40 undefined elements !!!!!

Also im Grunde nicht als die beste Praxis betrachtet, auch gibt es einen kleinen Unterschied gibt, können Sie Länge zu übergeben new Array(length) auf diese Weise, was auch nicht empfehlenswert ist.

0 Stimmen

Hallo Alireza, wurden diese Informationen von irgendwoher kopiert und eingefügt? Bitte fügen Sie einen Link zu der Seite hinzu, von der der Text kopiert wurde. Siehe diese Help-Center-Seite für Details. Wir danken Ihnen.

0 Stimmen

Nützlich für new Array(40).fill(123)

2voto

algiogia Punkte 916

Ich habe in einem seltsamen Verhalten mit [] entstanden.

Wir haben Modell-"Klassen" mit Feldern, die auf einen bestimmten Wert initialisiert sind. Z.B.:

require([
  "dojo/_base/declare",
  "dijit/_WidgetBase",
], function(declare, parser, ready, _WidgetBase){

   declare("MyWidget", [_WidgetBase], {
     field1: [],
     field2: "",
     function1: function(),
     function2: function()
   });    
});

Ich habe festgestellt, dass bei der Initialisierung der Felder mit [] dann wird sie von allen Modellobjekten gemeinsam genutzt. Änderungen an einem Objekt wirken sich auf alle anderen aus.

Dies geschieht nicht, wenn sie mit new Array() . Dasselbe gilt für die Initialisierung von Objekten ( {} gegen neu Object() )

Ehrlich gesagt bin ich mir nicht sicher, ob es ein Problem mit dem von uns verwendeten Framework ist ( Dojo )

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