2016-05-07 18 views
5

Ho uno strano problema con [].forEach in NodeJS.NodeJS [] .for Undefined

(Usando V5.4.1 NodeJs)

Avere questo codice in una funzione

function _buildUserQuestionsForDisplay(question,callback){ 
    var res = {} 
    ["is_open","created","deleted","_id"].forEach(function(v){ 
     res[v] = question[v] 
    }) 
    ... 
    ... 
} 

Lanciare un errore:

["is_open","created","deleted","_id"].forEach(function(v){

TypeError: Cannot read property 'forEach' of undefined

Funziona se sto cambiando il codice per

var arr = ["is_open","created","deleted","_id"]; 
arr.forEach(function(v){ 
    res[v] = question[v] 
}) 

I have tes ha la stessa funzione su Chrome.console e il primo modo funziona.
So che entrambi utilizzano il motore JS V8, è un bug o qualcosa che mi manca con le regole Javascript?

grazie!

+1

Il nodo ha esito negativo anche con una versione minima autonoma di tale codice? Stai usando moduli che potrebbero cambiare 'Array.prototype' o' Object.prototype'? – robertklep

+3

Se metti un punto e virgola dopo 'var res = {}' funziona allora? – Andy

+0

@Andy hai ragione, mi sento un po 'stupido, il compilatore di Javascript dovrebbe perdonare che se metto newline, no? –

risposta

3

Il codice si rompe se non si dispone di un punto e virgola dopo questa riga:

var res = {} 

di minimizzare questi problemi una buona idea è quella di utilizzare un Linter, se non si sta usando uno. Entrambi JSHint e ESLint possono essere aggiunti come plugin per l'editor di codice (utilizzo ESLint con il foglio di stile Airbnb in SubmlimeText) e possono anche essere aggiunti al flusso di lavoro utilizzando Gulp o Grunt per catturare questo tipo di errori prima di eseguire il commit del codice.

If you choose to omit semicolons where possible, my advice is to insert them immediately before the opening parenthesis or square bracket in any statement that begins with one of those tokens, or any which begins with one of the arithmetic operator tokens "/", "+", or "-" if you should happen to write such a statement. - blog entry by Michaeljohn Clement 2010

+0

Grazie! btw sto usando Visual Studio per Mac Editor (ottimo editor NodeJS per Mac, migliore del 9000% di CPU NetBeans) ma forse Microsoft ha fatto qualcosa di sbagliato con il nuovo carattere di linea che al compilatore non piacerà –

+5

Penso che "qualche motivo" sia che ciò che sta facendo il codice senza il punto e virgola sta tentando di accedere alla proprietà "_id" dell'oggetto vuoto, che è ovviamente indefinito e non ha un metodo forEach(). – nnnnnn

+0

@nnnnnn Come ho capito; il mio codice stava facendo la prossima cosa (per esempio) '{a: 5} [" a "] // 5' e' {a: 5} ["b"] // undefined', e su quello ero facendo forEach, che è esattamente quello che hai descritto per il tasto '_id' –