2009-07-07 23 views
56

JSLint me está dando este error:¿Qué es la notación literal de matriz en javascript y cuándo debería usarla?

Problem at line 11 character 33: Use the array literal notation [].

var myArray = new Array(); 

¿Cuál es la notación de matriz literal y por qué es lo que quiere que lo use en su lugar?

Demuestra aquí que new Array(); debería funcionar bien ... ¿hay algo que me falta?

+0

Esto es similar a, pero no exactamente lo mismo que: http://stackoverflow.com/questions/931872/whats-the-difference-between-array-and-while-declaring-a-javascript-arr/ – Borgar

+1

duplicado de [¿Qué pasa con var x = new Array();] (http://stackoverflow.com/questions/885156/whats-wrong-with-var-x-new-array) – Bergi

+0

También use siempre el literal cuando puede porque el constructor Array (nuevo Array()) no siempre funciona correctamente. p.ej. si hay un solo valor que es un número. > new Array (3, 11, 8) [3, 11, 8]> new Array (3) [,,,]> new Array (3.1) RangeError: Invalid array length –

Respuesta

78

La notación literal de matriz es donde se define una nueva matriz con solo corchetes vacíos. En su ejemplo:

var myArray = []; 

Es la "nueva" forma de definir matrices, y supongo que es más corta/limpiadora.

Los ejemplos siguientes explican la diferencia entre ellos:

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 

Reference: What’s the difference between “Array()” and “[]” while declaring a JavaScript array?

+16

Es la "nueva" forma ... sin juego de palabras? –

+3

Pero la respuesta no explica eso cuando debemos usar el literal, es decir [] y cuándo usar la nueva matriz(); –

+3

Siempre use el literal '[]'. La razón de que esto sea mejor es que es más seguro porque alguien podría sobrescribir el constructor 'window.Array' pero no el literal. – thwd

20

Ver también: What’s wrong with var x = new Array();

Aparte del argumento Crockford, creo que se debe también al hecho de que otras lenguas tienen estructuras de datos similares que usan la misma sintaxis; por ejemplo, Python has lists and dictionaries; vea los siguientes ejemplos:

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

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

¿No es claro cómo Python también es gramaticalmente correcto Javascript? (Sí, faltan los puntos y comas, pero tampoco son necesarios para Javascript)

Por lo tanto, al reutilizar paradigmas comunes en la programación, salvamos a todos de tener que volver a aprender algo que no debería ser necesario.

+1

Gracias por la explicación. ¡Gran respuesta! –

0

Después de mirar @ecMode jsperf, hice algunas pruebas adicionales.

Al utilizar Pulsa para añadir a la matriz de nuevo Array() es considerablemente más rápido en Chrome:

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

utilizando el índice de añadir es ligeramente más rápida para [].

Cuestiones relacionadas