Чтобы добавить в ES2015 использование Reflect.ownKeys(obj)
, а также итерацию по свойствам через итератор.
Например:
let obj = { a: 'Carrot', b: 'Potato', Car: { doors: 4 } };
можно повторить с помощью
// logs each key
Reflect.ownKeys(obj).forEach(key => console.log(key));
Если вы хотите выполнить итерацию непосредственно по значениям ключей объекта, вы можете определить iterator
, так же как итераторы JavaScipts по умолчанию для строк, массивов, типизированных массивов, Map и Set.
JS попытается выполнить итерацию через свойство итератора по умолчанию, которое должно быть определено как Symbol.iterator
.
Если вы хотите иметь возможность выполнять итерацию по всем объектам, вы можете добавить его в качестве прототипа Object:
Object.prototype[Symbol.iterator] = function*() {
for(p of Reflect.ownKeys(this)){ yield this[p]; }
}
Это позволит вам перебирать значения объекта с циклом for ..., например:
for(val of obj) { console.log('Value is:' + val ) }
Внимание : снаписание этого ответа (июнь 2018 г.) для всех других браузеров, кроме IE, с поддержкой генераторов и for...of
итераций через Symbol.iterator