Disons que vous avez un objet javascript comme celui-ci:
var data = { foo: 'bar', baz: 'quux' };
Vous pouvez accéder aux propriétés par le nom de la propriété:
var foo = data.foo;
var baz = data["baz"];
Mais est-il possible d'obtenir ces valeurs si vous ne connaissez pas le nom des propriétés? Le caractère non ordonné de ces propriétés rend-il impossible de les distinguer?
Dans mon cas, je pense spécifiquement à une situation où une fonction doit accepter une série de paires nom-valeur, mais les noms des propriétés peuvent changer.
Jusqu'à présent, je pense que je dois transmettre les noms des propriétés à la fonction avec les données, mais cela ressemble à un piratage. Je préférerais faire cela avec introspection si possible.
la source
Les anciennes versions de JavaScript (<ES5) nécessitent l'utilisation d'une
for..in
boucle:ES5 introduit Object.keys et Array # forEach, ce qui facilite un peu la tâche:
ES2017 présente
Object.values
etObject.entries
.la source
la source
Vous voudrez souvent examiner les propriétés particulières d'une instance d'un objet, sans toutes ses méthodes et propriétés de prototype partagées:
la source
Cela obtiendra toutes les propriétés et leurs valeurs (héritées ou propres, énumérables ou non) dans un nouvel objet. l'objet original est intact. Maintenant, un nouvel objet peut être parcouru en utilisant
la source
la source
.hasOwnProperty()
lorsque vous utilisez for in pour itérer un objet.hasOwnProperty()
méthode renvoie unboolean
indiquant si l'objet a la propriété spécifiée comme sa propre propriété (par opposition à l'hériter) . voir cet exempleVous pouvez utiliser Object.keys () , "qui retourne un tableau des propres noms de propriétés énumérables d'un objet donné, dans le même ordre que nous obtenons avec une boucle normale."
Vous pouvez utiliser n'importe quel objet à la place de
stats
:la source
Object.keys( stats )[key]
n'a aucun sens, le sera toujoursundefined
.la source