Czym jest literalna notacja tablicy w javascript i kiedy należy jej używać?

JSLint daje mi ten błąd:

Problem w linii 11 znak 33: użyj tablicy literalnej notacji [].

var myArray = new Array();

Co to jest tablica dosłowna notacja i dlaczego chce, żebym zamiast niej jej używał?

Pokazuje tutaj, że new Array(); powinno działać dobrze... coś mi umyka?

Author: Purag, 2009-07-08

4 answers

Literalna notacja tablicy to miejsce, w którym definiuje się nową tablicę za pomocą tylko pustych nawiasów. W twoim przykładzie:

var myArray = [];

Jest to "nowy" sposób definiowania tablic i przypuszczam, że jest krótszy/czystszy.

Poniższe przykłady wyjaśniają różnicę między nimi:

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

Bibliografia: Jaka jest różnica między" Array () " a "[] " podczas deklarowania tablicy JavaScript?

 83
Author: CookieOfFortune,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:22

Zobacz też: Co jest nie tak z var x = new Array();

Pomijając argument Crockford, uważam, że wynika to również z faktu, że inne języki mają podobne struktury danych, które używają tej samej składni; na przykład, Python ma listy i słowniki ; zobacz następujące przykłady:

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

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

Czy nie jest fajnie, że Python jest również poprawnym gramatycznie Javascript? (tak, brakuje dwukropków końcowych, ale nie są one wymagane dla Javascript, albo)

Tak więc, poprzez ponowne wykorzystanie wspólnych paradygmatów w programowaniu, unikamy konieczności ponownego uczenia się czegoś, co nie powinno być konieczne.

 22
Author: ken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:44

Pomijając argument Crockford, jsPerf mówi, że jest szybszy. http://jsperf.com/new-vs-literal-array-declaration

 3
Author: ecMode,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-22 13:28:38

Po spojrzeniu na @ ecMode jsperf, zrobiłem kilka dalszych testów.

Przy użyciu push, aby dodać do tablicy, nowa tablica () jest znacznie szybsza w Chrome:

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

Użycie indeksu do dodania jest nieco szybsze dla [].

 0
Author: Skeep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-25 14:22:16