Digamos que tiene un objeto javascript como este:
var data = { foo: 'bar', baz: 'quux' };
Puede acceder a las propiedades por el nombre de la propiedad:
var foo = data.foo;
var baz = data["baz"];
Pero, ¿es posible obtener estos valores si no conoce el nombre de las propiedades? ¿La naturaleza desordenada de estas propiedades hace que sea imposible distinguirlas?
En mi caso, estoy pensando específicamente en una situación en la que una función necesita aceptar una serie de pares de nombre-valor, pero los nombres de las propiedades pueden cambiar.
Mis pensamientos sobre cómo hacer esto hasta ahora es pasar los nombres de las propiedades a la función junto con los datos, pero esto se siente como un truco. Preferiría hacer esto con introspección si es posible.
fuente
Las versiones anteriores de JavaScript (<ES5) requieren el uso de un
for..in
bucle:ES5 presenta Object.keys y Array # forEach, lo que lo hace un poco más fácil:
ES2017 presenta
Object.values
yObject.entries
.fuente
fuente
A menudo querrá examinar las propiedades particulares de una instancia de un objeto, sin todos sus métodos y propiedades de prototipo compartidos:
fuente
Esto obtendrá todas las propiedades y sus valores (heredados o propios, enumerables o no) en un nuevo objeto. El objeto original está intacto. Ahora se puede atravesar un nuevo objeto usando
fuente
fuente
.hasOwnProperty()
cuando use for para iterar un objeto.hasOwnProperty()
método devuelve unaboolean
indicación de si el objeto tiene la propiedad especificada como su propia propiedad (en lugar de heredarla) . ver este ejemploPuede usar Object.keys () , "que devuelve una matriz de los nombres de propiedad enumerables de un objeto dado, en el mismo orden que obtenemos con un bucle normal".
Puede usar cualquier objeto en lugar de
stats
:fuente
Object.keys( stats )[key]
no tiene sentido, siempre lo seráundefined
.fuente