2009-12-20 7 views
11

No entiendo por qué recibo el mensaje de error cuando ejecuto JSLint con un archivo JavaScript."Usar la notación literal de matriz []" para var os_map = {}

Aparece el mensaje var os_map = {}; Problem at line 28 character 36: Use the array literal notation []. si ejecuto this code en JSLint. Las opciones para JSLint son las siguientes.

/*jslint onevar: true, browser: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, strict: true, newcap: true, immed: true */ 

objeto Reivindicación de (, que es {}) debería estar bien, pero JSLint suggets utilizar una matriz vacía (, que es [])

: He encontrado una respuesta. Estaba equivocado. No hay nada de malo en var os_map = {}. El código se mostró en un mensaje de error porque no usé "require strict";. Me salió mal el mensaje de error. Gracias por responder mis preguntas.

Respuesta

33

La línea en cuestión:

var os_autoload_inputs = new Array('searchInput', 'searchInput2', 
            'powerSearchText', 'searchText'); 

JSLint hace not expect para ver new Array constructor, debe utilizar [] en lugar:

var os_autoload_inputs = ['searchInput', 'searchInput2', 
            'powerSearchText', 'searchText']; 

¿Por qué? :

1, a Crockford no le gusta new.

2, el objeto Array podría ser anulados:

Array = {}; 
new Array(); // TypeError: Array is not a constructor 

3, las inconsistencias de uso, por ejemplo .:

var a = new Array(5); // empty 5 elements array 
var b = [5]; // 1 element array containing the 5 number on index 0 

Ver también:

+0

Gracias. No hay nada de malo con la parte 'os_map = {}'? –

+0

De nada, @TK, no hay nada de malo en esa línea. – CMS

1

Mi lectura de la línea 28 en that code es:

var os_autoload_forms = new Array('searchform', 'searchform2', 'powersearch', 'search'); 

... donde podría de hecho ser apropiado utilizar la sintaxis literal de matriz:

var os_autoload_forms = ['searchform', 'searchform2', 'powersearch', 'search' ]; 

Cabe decir lo mismo sobre la línea 27, sin embargo.

+0

Gracias. Tienes razón. Confundí el mensaje de error Por favor, lea la "Actualización" en mi pregunta. –

3

cambiar esta situación:

var a = new Array(5); 

para esto:

var a = new [].constructor(5); 
0

problema en la línea de 16 caracteres 32: Uso de la matriz notación literal []. si ejecuto este código en JSLint. Las opciones para JSLint son las siguientes.

acaba de hacer

var arrayName = [];

Cuestiones relacionadas