2009-12-20 11 views
11

Non capisco perché ottengo il messaggio di errore quando eseguo JSLint con un file JavaScript."Usa la notazione letterale dell'array []" per var os_map = {}

Viene visualizzato il messaggio var os_map = {}; Problem at line 28 character 36: Use the array literal notation []. se si esegue this code in JSLint. Le opzioni per JSLint come segue.

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

oggetto Rivendicazione (che è {}) dovrebbe essere a posto, ma JSLint suggets utilizzare un array vuoto (che è [])

: ho trovato una risposta. Mi sbagliavo. Non c'è niente di sbagliato con var os_map = {}. Il codice è stato mostrato in un messaggio di errore perché non ho usato "require strict";. Ho sbagliato il messaggio di errore. Grazie per aver risposto alla mia domanda.

risposta

33

La linea incriminata:

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

JSLint fa not expect vedere new Array costruttore, è necessario utilizzare [] invece:

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

Perché? :

1, a Crockford non piace new.

2, L'oggetto Array potrebbero essere ignorate:

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

3, incongruenze utilizzo, per es .:

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

Vedi anche:

+0

Grazie. Non c'è niente di sbagliato in 'os_map = {}' parte? –

+0

Prego @TK, non c'è niente di sbagliato in questa linea. – CMS

1

La mia lettura della linea 28 in that code è:

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

... dove sarebbe davvero opportuno utilizzare la sintassi array letterale:

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

Occorre dire la stessa cosa sulla linea 27, però.

+0

Grazie. Hai ragione. Ho scambiato il messaggio di errore. Si prega di leggere "Aggiornamento" nella mia domanda. –

3

Modifica questa:

var a = new Array(5); 

per questo:

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

Problemi alla riga 16 caratteri 32: Utilizzare la notazione letterale array []. se eseguo questo codice in JSLint. Le opzioni per JSLint come segue.

basta fare

var ArrayName = [];

Problemi correlati