1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
---
title: Object.keys()
slug: Web/JavaScript/Reference/Global_Objects/Object/keys
tags:
- ECMAScript 5
- JavaScript
- JavaScript 1.8.5
- Méthode
- Object
- Reference
translation_of: Web/JavaScript/Reference/Global_Objects/Object/keys
original_slug: Web/JavaScript/Reference/Objets_globaux/Object/keys
---
<div>{{JSRef}}</div>
<p>La méthode <code><strong>Object.keys()</strong></code> renvoie un tableau contenant les noms des propriétés propres à un objet (qui ne sont pas héritées via la chaîne de prototypes) et qui sont énumérables. L'ordre de ce tableau est le même que celui obtenu par une boucle {{jsxref("Instructions/for...in","for...in")}} (à la différence qu'une boucle for-in liste également les propriétés héritées).</p>
<div>{{EmbedInteractiveExample("pages/js/object-keys.html")}}</div>
<p class="hidden">Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> et à envoyer une <em>pull request</em> !</p>
<h2 id="Syntaxe">Syntaxe</h2>
<pre class="syntaxbox">Object.keys(<var>obj</var>)</pre>
<h3 id="Paramètres">Paramètres</h3>
<dl>
<dt><code>obj</code></dt>
<dd>L'objet dont on souhaite lister les propriétés propres et énumérables.</dd>
</dl>
<h3 id="Valeur_de_retour">Valeur de retour</h3>
<p>Un tableau de chaînes de caractères qui sont les noms des propriétés énumérables de l'objet passé en argument.</p>
<h2 id="Description">Description</h2>
<p><code>Object.keys()</code> renvoie un tableau dont les éléments sont les chaînes de caractères des noms des propriétés propres et énumérables d<code>'obj</code>. L'ordre des propriétés obtenu est le même que celui obtenu lorsqu'on boucle manuellement sur les propriétés de l'objet.</p>
<h2 id="Exemples">Exemples</h2>
<pre class="brush: js">var arr = ["a", "b", "c"];
console.log(Object.keys(arr));
// affichera ['0', '1', '2']
// un objet semblable à un tableau
var obj = { 0 : "a", 1 : "b", 2 : "c"};
console.log(Object.keys(obj));
// affichera ['0', '1', '2']
// un objet semblable à un tableau avec
// un ordre de clé aléatoire
var an_obj = { 100: "a", 2: "b", 7: "c"};
console.log(Object.keys(an_obj));
// affichera ['2', '7', '100']
// getToto est une propriété non énumérable
var monObjet = Object.create({}, {
getToto : {
value : function () {
return this.toto }
}
});
monObjet.toto = 1;
console.log(Object.keys(monObjet));
// affichera ['toto']
</pre>
<p>Si on souhaite lister toutes les propriétés, y compris celles qui ne sont pas énumérables, on pourra utiliser {{jsxref("Object.getOwnPropertyNames()")}}.</p>
<h2 id="Notes">Notes</h2>
<p>Pour ES5, si l'argument passé à la méthode n'est pas un objet mais une valeur d'un autre type primitif, cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015 (ES6), un argument qui n'est pas un objet sera d'abord converti en objet.</p>
<pre class="brush: js">Object.keys("toto");
// TypeError: "toto" n'est pas un objet (code ES5)
Object.keys("toto");
// ["0", "1", "2", "3"] (code ES2015)</pre>
<h2 id="Spécifications">Spécifications</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Spécification</th>
<th scope="col">État</th>
<th scope="col">Commentaires</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.2.3.14', 'Object.keys')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td>Définition initiale.<br>
Implémentée avec JavaScript 1.8.5</td>
</tr>
<tr>
<td>{{SpecName('ES2015', '#sec-object.keys', 'Object.keys')}}</td>
<td>{{Spec2('ES2015')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-object.keys', 'Object.keys')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2>
<div>
<div class="hidden">Le tableau de compatibilité de cette page a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à consulter <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et à nous envoyer une <em>pull request</em>.</div>
<p>{{Compat("javascript.builtins.Object.keys")}}</p>
</div>
<h2 id="Voir_aussi">Voir aussi</h2>
<ul>
<li><a href="/fr/docs/Web/JavaScript/Caractère_énumérable_des_propriétés_et_rattachement">Énumérabilité et possession des propriétés</a></li>
<li>{{jsxref("Object.prototype.propertyIsEnumerable()")}}</li>
<li>{{jsxref("Object.create()")}}</li>
<li>{{jsxref("Object.getOwnPropertyNames()")}}</li>
<li>{{jsxref("Object.values()")}}</li>
<li>{{jsxref("Object.entries()")}}</li>
</ul>
|