Was ist die Array-Literal-Notation in Javascript und wann sollten Sie sie verwenden?

71

JSLint gibt mir diesen Fehler:

Problem in Zeile 11, Zeichen 33: Verwenden Sie die Array-Literal-Notation [].

var myArray = new Array();

Was ist Array-Literal-Notation und warum soll ich sie stattdessen verwenden?

Es zeigt hier, dass new Array();es gut funktionieren sollte ... fehlt mir etwas?

Matt
quelle
1
Dies ist ähnlich, aber nicht ganz dasselbe wie: stackoverflow.com/questions/931872/…
Borgar
1
Verwenden Sie auch immer das Literal, wenn Sie können, da der Array-Konstruktor (new Array ()) nicht immer richtig funktioniert. zB wenn es einen einzelnen Wert gibt, der eine Zahl ist. > neues Array (3, 11, 8) [3, 11, 8]> neues Array (3) [,,,]> neues Array (3.1) RangeError: Ungültige Array-Länge
Ingadi

Antworten:

102

In der Array-Literal-Notation definieren Sie ein neues Array mit nur leeren Klammern. In Ihrem Beispiel:

var myArray = [];

Es ist die "neue" Art, Arrays zu definieren, und ich nehme an, es ist kürzer / sauberer.

Die folgenden Beispiele erklären den Unterschied zwischen ihnen:

var a = [],            // these are the same
    b = new Array(),   // a and b are arrays with length 0

    c = ['foo', 'bar'],           // these are the same
    d = new Array('foo', 'bar'),  // c and d are arrays with 2 strings

    // these are different:
    e = [3],             // e.length == 1, e[0] == 3
    f = new Array(3);   // f.length == 3, f[0] == undefined

Referenz : Was ist der Unterschied zwischen "Array ()" und "[]" beim Deklarieren eines JavaScript-Arrays?

CookieOfFortune
quelle
20
Es ist der "neue" Weg ... kein Wortspiel beabsichtigt?
Arxpoetica
3
Die Antwort erklärt jedoch nicht, wann wir Literal verwenden sollten, dh [] und wann wir neues Array () verwenden sollten;
Dattatray Walunj
5
Verwenden Sie immer das Literal []. Der Grund dafür ist, dass es sicherer ist, weil jemand möglicherweise den window.ArrayKonstruktor überschreiben könnte, aber nicht das Literal.
thwd
1
Für diejenigen, die TypeScript verwenden, ist das Äquivalent var a: string[] = [];.
teuber789
23

Siehe auch: Was ist los mit var x = new Array ();

Abgesehen vom Crockford-Argument glaube ich, dass dies auch auf die Tatsache zurückzuführen ist, dass andere Sprachen ähnliche Datenstrukturen haben, die zufällig dieselbe Syntax verwenden. Python verfügt beispielsweise über Listen und Wörterbücher . siehe folgende Beispiele:

// this is a Python list
a = [66.25, 333, 333, 1, 1234.5]

// this is a Python dictionary
tel = {'jack': 4098, 'sape': 4139}

Ist es nicht ordentlich, wie Python auch grammatikalisch korrektes Javascript ist? (Ja, die endenden Semikolons fehlen, aber diese sind auch für Javascript nicht erforderlich.)

Indem wir gängige Paradigmen in der Programmierung wiederverwenden, ersparen wir jedem, etwas neu lernen zu müssen, was nicht sein sollte.

Ken
quelle
1
Danke für die Erklärung. Gute Antwort!
Evik James
0

Nachdem ich mir @ecMode jsperf angesehen hatte, führte ich einige weitere Tests durch.

Wenn Sie Push zum Hinzufügen zum Array verwenden, ist neues Array () in Chrome erheblich schneller:

http://jsperf.com/new-vs-literal-array-declaration/2

Die Verwendung des Index zum Hinzufügen ist für [] etwas schneller.

Skeep
quelle