Wenn ich ein neues Array deklarieren muss, verwende ich diese Notation
var arr = new Array();
Beim Online-Testen, beispielsweise auf jsbin , wird ich jedoch durch eine Warnung aufgefordert, "die Array-Literal-Notation [] zu verwenden".
Ich habe keinen Grund gefunden, die Verwendung des Konstruktors zu vermeiden. Ist in gewisser Weise weniger effizient als die Verwendung []
? Oder ist es schlechte Praxis?
Gibt es einen guten Grund, var arr = [];
statt zu verwenden var arr = new Array();
?
javascript
Naigel
quelle
quelle
Antworten:
Meistens benutzen die Leute,
var a = []
weil Douglas Crockford es sagt .Zu seinen Gründen gehört das nicht intuitive und inkonsistente Verhalten von
new Array()
:Beachten Sie, dass es keine Möglichkeit gibt
new Array()
, ein Array mit nur einem vordefinierten Zahlenelement zu erstellen !Die Verwendung
[]
ist tatsächlich effizienter und auch sicherer ! Es ist möglich, denArray
Konstruktor zu überschreiben und ihn dazu zu bringen, seltsame Dinge zu tun, aber Sie können das Verhalten von nicht überschreiben[]
.Persönlich verwende ich immer die
[]
Syntax und ebenso immer die{}
Syntax anstelle vonnew Object()
.quelle
[]
ein interner Konstruktor aufgerufen wird , nicht der WertArray.constructor
, der gerade vorhanden ist.Array
Konstruktor: jsperf.com/new-arrayEin wesentlicher Unterschied besteht darin , dass
[]
wird immer ein neues Array instanziiert, währendnew Array
könnte entführt ein anderes Objekt zu erstellen .In meinem Beispielcode habe ich die
Array
Funktion vor dem Rest des Dokumentbereichs verborgen gehalten. Es ist jedoch wahrscheinlicher, dass der Code nicht in einem schönen Abschluss belassen wurde, wenn Sie jemals auf ein solches Problem stoßen wahrscheinlich schwer zu finden.Haftungsausschluss : Es ist keine gute Idee, den
Array
Konstruktor zu entführen .quelle
aus Gründen der Wartbarkeit verwenden
[]
Das Array-Literal ist vorhersehbarer, da die meisten Entwickler es verwenden. Die meisten Array-Anwendungen verwenden das Literal, und es ist sinnvoll, dass Ihr Code mit dem übereinstimmt, was andere Entwickler verwenden.
Verwenden Sie für leere Arrays
[]
Wie hier gezeigt , ist die Verwendung des Literal für leere und einige bekannte Elemente schwieriger als der Array-Konstruktor.
Verwenden Sie für ein Array bekannter Größe
new Array(size)
Wenn die Größe bekannt ist, verbessert die Verwendung des Array-Konstruktors die Leistung erheblich. Es bedeutet jedoch auch, dass Sie sich mit einem Array befassen müssen, dessen Werte bereits "undefiniert" sind.
Wie hier gezeigt
Dies funktioniert auch für sehr kleine Arrays .
quelle
Nein, es gibt eigentlich keinen Grund, für leere Arrays eine Notation über der anderen zu verwenden.
Die meisten Browser zeigen jedoch eine etwas bessere Leistung
x = [];
als der Aufruf des Konstruktors .Wenn Sie einen Array mit einer bestimmten Größe, Sie Art zu schaffen Notwendigkeit zu verwenden
x = new Array(10);
zum Beispiel, die ein Array mit 10 schaffen würdenundefined
Slots.quelle
Der schnellste Weg, ein Array oder Objekt zu definieren, ist der wörtliche Weg, da Sie den Konstruktor nicht aufrufen müssen
quelle
var arr = [];
Verwendet hinter den Kulissen logischerweise auch einen Konstruktor. Es ist einfach immer der eingebaute Array-Konstruktor und nicht die Funktion, die derzeit unter dem Namen ausgeführt wirdArray
.Beides ist nur richtig. Aber die meisten Leute benutzen
var a = []
Drei Möglichkeiten, ein Array in JavaScript zu deklarieren.
Methode 1 : Wir können ein Array explizit mit dem JavaScript-Schlüsselwort "new" deklarieren, um das Array im Speicher zu instanziieren (dh es zu erstellen und verfügbar zu machen).
Methode 2 : Wir verwenden eine alternative Methode zum Deklarieren von Arrays.
Methode 3 : Mit JavaScript können Sie Arrays auch indirekt erstellen, indem Sie bestimmte Methoden aufrufen.
quelle
Es gibt eine Grenze, die der Konstruktor als Argumente verwenden kann.
Auf den meisten Systemen, auf die ich gestoßen bin, beträgt das Limit 2 ^ 16 (2 Bytes):
Das wird einen Fehler verursachen (zu viele Argumente ....)
Wenn Sie das Literal [] verwenden, haben Sie solche Probleme nicht.
Falls Sie sich nicht für so große Arrays interessieren, können Sie meiner Meinung nach alles verwenden, was Sie bevorzugen.
quelle
ist Zucker
ist Salz
quelle
Es ist, weil
new Array()
es mehrdeutig ist. Dies sind die richtigen Konstruktoren:quelle