Para agregar el uso de ES2015 Reflect.ownKeys(obj)
y también iterar sobre las propiedades a través de un iterador.
Por ejemplo:
let obj = { a: 'Carrot', b: 'Potato', Car: { doors: 4 } };
puede ser iterado por
// logs each key
Reflect.ownKeys(obj).forEach(key => console.log(key));
Si desea iterar directamente sobre los valores de las claves de un objeto, puede definir un iterator
, al igual que los iteradores predeterminados de JavaScipts para cadenas, matrices, matrices escritas, Map y Set.
JS intentará iterar a través de la propiedad de iterador predeterminada, que debe definirse como Symbol.iterator
.
Si desea poder iterar sobre todos los objetos, puede agregarlo como un prototipo de Objeto:
Object.prototype[Symbol.iterator] = function*() {
for(p of Reflect.ownKeys(this)){ yield this[p]; }
}
Esto le permitiría iterar sobre los valores de un objeto con un bucle for ... of, por ejemplo:
for(val of obj) { console.log('Value is:' + val ) }
Precaución : al escribir esta respuesta (junio de 2018), todos los demás navegadores, excepto IE, admiten generadores e for...of
iteración a través deSymbol.iterator
if (typeof(obj[propt]) === 'object') {
/ * Hazlo de nuevo * /}