2012-09-28 12 views
11

Zgodnie ze stroną MDN pod numerem for each...in loop, ta konstrukcja jest nieaktualna. Czy istnieje alternatywa, która robi dokładnie to samo? for...of loop nie wykonuje iteracji nad niecałkowitymi (własnymi wyliczalnymi) właściwościami. Jeśli nie ma alternatywy, dlaczego go wtedy zniechęcili?JavaScript alternatywny do pętli "dla każdego"

+0

dobry punkt [tutaj] (wykonaną http://stackoverflow.com/questions/242841/javascript-for-in-vs -do) – noel

Odpowiedz

2

Czy istnieje alternatywa, która robi dokładnie to samo?

for ... in pętla, w której pierwszą rzeczą zrobić w bloku kodu jest skopiowanie foo[propertyname] do zmiennej.

+1

Tak, myślę, że istnieje tylko to obejście, które tak naprawdę nie jest zamiennikiem języka dla "dla każdego". Więc nie powinni byli go zdeprawować, prawda? – user1537366

+0

O ile pamiętam, działa to tylko na webkicie? – Benedictus

+0

@Benedictus - Nie. Jest w JavaScript 1.0. Netscape 2 obsługuje go! – Quentin

14

iteracyjne nad wszystkich właściwości obiektu obj, można to zrobić:

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

Jeśli chcesz uniknąć odziedziczone właściwości, można to zrobić:

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

Można skorzystać z nowych ECMAScript 5. edycja funkcji:

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

^w ten sposób rozwiązałem błąd "no-restricted-syntax" z eslint, gdy użyte jest 'forinstatement'. – pherris