Альтернатива JavaScript для каждого цикла

Согласно странице MDN для каждой... в цикле эта конструкция устарела. Есть ли альтернатива, которая делает то же самое? Цикл for... цикла не перебирает нецелые (собственные перечислимые) свойства. Если альтернативы нет, почему они тогда ее осуждают?

Ответ 1

Есть ли альтернатива, которая делает то же самое?

A for... in loop, в котором первое, что вы делаете в блоке кода, - это скопировать foo[propertyname] в переменную.

Ответ 2

Чтобы перебрать все свойства объекта obj, вы можете сделать это:

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

Если вы хотите избежать унаследованных свойств, вы можете сделать это:

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

Ответ 3

Вы можете использовать новые функции ECMAScript 5th Edition:

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