Was ist der wirkliche Unterschied zwischen der Deklaration eines Arrays wie diesem:
var myArray = new Array();
y
var myArray = [];
Was ist der wirkliche Unterschied zwischen der Deklaration eines Arrays wie diesem:
var myArray = new Array();
y
var myArray = [];
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()
:)
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.
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
[] != []
)
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.
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.
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 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.
2 Stimmen
[]
Token:ARRAY_INIT
;new Array
Spielsteine:NEW, IDENTIFIER
;new Array()
Spielsteine:NEW, IDENTIFIER, CALL