2012-09-28 20 views
11

Secondo la pagina MDN allo for each...in loop, questo costrutto è deprecato. Esiste un'alternativa che faccia esattamente la stessa cosa? Lo for...of loop non esegue iterazioni su proprietà non interi (proprie enumerabili). Se non c'è un'alternativa, perché l'hanno deprecato allora?Alternativa JavaScript al ciclo "per ogni"

+0

Buon punto [fatta qui] (http://stackoverflow.com/questions/242841/javascript-for-in-vs -per) – noel

risposta

2

Is c'è un'alternativa che fa esattamente la stessa cosa?

Un for ... in ciclo in cui la prima cosa da fare nel blocco di codice è quello di copiare foo[propertyname] a una variabile.

+1

Sì, immagino ci sia solo questo work-around, che non è in realtà un sostituto linguistico per "per ciascuno". Quindi non dovrebbero averlo deprecato, giusto? – user1537366

+0

Per quanto mi ricordo, funziona solo su webkit? – Benedictus

+0

@Benedictus - No. È in JavaScript 1.0. Netscape 2 lo supporta! – Quentin

14

Per iterare su tutte le proprietà di un oggetto obj, si può fare questo:

for (var key in obj) { 
    console.log(key, obj[key]); 
} 

Se si vuole evitare di proprietà ereditate, si può fare questo:

for (var key in obj) { 
    if (!obj.hasOwnProperty(key)) continue; 
    console.log(key, obj[key]); 
} 
11

Si può fare uso delle nuove ECMAScript 5 ° edizione funzioni:

Object.keys(obj).forEach(function (key) { 
    console.log(key, obj[key]); 
}); 
+3

^questo è il modo in cui ho risolto l'errore 'no-restricted-syntax' da eslint quando viene usato' forinstatement'. – pherris