Per aggiungere l'utilizzo di ES2015 di Reflect.ownKeys(obj) e l'iterazione di sulle proprietà tramite un iteratore.
Per esempio:
let obj = { a: 'Carrot', b: 'Potato', Car: { doors: 4 } };
può essere ripetuto da
// logs each key
Reflect.ownKeys(obj).forEach(key => console.log(key));
Se desideri iterare direttamente sui valori delle chiavi di un oggetto, puoi definire un iterator , proprio come gli iteratori predefiniti di JavaScipts per stringhe, array, array digitati, Map e Set.
JS tenterà di eseguire l'iterazione tramite la proprietà iteratore predefinita, che deve essere definita come Symbol.iterator.
Se vuoi essere in grado di iterare su tutti gli oggetti, puoi aggiungerlo come prototipo di Object:
Object.prototype[Symbol.iterator] = function*() {
for(p of Reflect.ownKeys(this)){ yield this[p]; }
}
Ciò consentirebbe di scorrere i valori di un oggetto con un ciclo for ... of, ad esempio:
for(val of obj) { console.log('Value is:' + val ) }
Attenzione : al momento di scrivere questa risposta (giugno 2018) tutti gli altri browser, tranne IE, supportano i generatori e l' for...ofiterazione tramiteSymbol.iterator
if (typeof(obj[propt]) === 'object') {/ * Fallo di nuovo * /}