aboutsummaryrefslogtreecommitdiff
path: root/files/fr/web/javascript/reference/objets_globaux/undefined/index.html
blob: 0e9e0a1cdcadb90a420fea76a16ebaea06164fa6 (plain)
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
131
132
133
134
135
136
137
---
title: undefined
slug: Web/JavaScript/Reference/Objets_globaux/undefined
tags:
  - JavaScript
  - Reference
translation_of: Web/JavaScript/Reference/Global_Objects/undefined
---
<div>{{jsSidebar("Objects")}}</div>

<p>La propriété globale <strong><code>undefined</code></strong> représente la valeur <code>undefined</code><em>.</em> Cette valeur est l'<a href="/fr/docs/Web/JavaScript/Structures_de_données#Le_type_ind.C3.A9fini">un des types primitifs de JavaScript</a>.</p>

<p>{{js_property_attributes(0,0,0)}}</p>

<div>{{EmbedInteractiveExample("pages/js/globalprops-undefined.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">undefined</pre>

<h2 id="Description">Description</h2>

<p><code>undefined</code> est une propriété de <em>l'objet global</em>, c'est-à-dire qu'elle est accessible globalement. La valeur initiale d'<code>undefined</code> est la valeur primitive <code>undefined</code>.</p>

<p>Dans les navigateurs modernes, d'après la spécification ECMAScript 5, <code>undefined</code> est une propriété non-configurable et non accessible en écriture. Si, toutefois, elle peut être modifiée dans l'environnement utilisé, il faut éviter de l'écraser.</p>

<p>Une variable pour laquelle aucune valeur n'a été assignée sera de type <code>undefined</code>. Une méthode ou instruction renvoie également <code>undefined</code> si la variable à évaluer n'a pas de valeur assignée. Une fonction renvoie <code>undefined</code> si aucune valeur n'a été {{jsxref("Instructions/return", "retournée","",1)}}.</p>

<div class="warning">
<p><strong>À ne pas faire !</strong> Puisque <code>undefined</code> n'est pas un <a href="/fr/docs/Web/JavaScript/Reference/Grammaire_lexicale#Mots-cl.C3.A9s">mot réservé du langage JavaScript</a>, il peut être utilisé comme <a href="/fr/docs/Web/JavaScript/Guide/Valeurs,_variables,_et_littéraux#Variables">identifiant</a> (nom de variable) dans toute portée autre que la portée globale. Ceci est une très mauvaise idée pour la lisibilité du code et sa maintenabilité.</p>

<pre class="brush: js">// À NE PAS FAIRE

// écrit "toto string" dans la console
(function() { var undefined = 'toto'; console.log(undefined, typeof undefined); })();

// écrit "toto string" dans la console
(function(undefined) { console.log(undefined, typeof undefined); })('toto');
</pre>
</div>

<h2 id="Exemples">Exemples</h2>

<h3 id="L'égalité_stricte_et_undefined">L'égalité stricte et <code>undefined</code></h3>

<p>Il est possible d'utiliser <code>undefined</code> et les opérateurs stricts pour l''égalité et l'inégalité strictes afin de déterminer si une variable a une valeur affectée. Dans le code qui suit, la variable <code>x</code> n'est pas initialisée et la première instruction <code>if</code> sera évaluée à <code>true</code> (vrai).</p>

<pre class="brush: js">var x;
if (x === undefined) {
   // ces instructions seront exécutées
}
if (x !== undefined) {
   // ces instructions ne seront pas exécutées
}
</pre>

<div class="note">
<p><strong>Note :</strong> L'opérateur d'égalité stricte doit être utilisé ici plutôt que l'opérateur d'égalité simple. En effet, <code>x == undefined</code> vérifie également si <code>x</code> vaut <code>null</code>, tandis que l'égalité stricte ne le fait pas. <code>null</code> n'est pas équivalent à <code>undefined</code>. Voir la page sur les {{jsxref("Opérateurs/Opérateurs_de_comparaison","opérateurs de comparaison","",1)}} pour plus de détails.</p>
</div>

<h3 id="L'opérateur_typeof_et_undefined">L'opérateur <code>typeof</code> et <code>undefined</code></h3>

<p>L'opérateur {{jsxref("Opérateurs/L_opérateur_typeof", "typeof")}} peut également être utilisé :</p>

<pre class="brush: js">var x;
if (typeof x == 'undefined') {
   // ces instructions seront exécutées
}
</pre>

<p>Une des raisons pour utiliser {{jsxref("Opérateurs/L_opérateur_typeof", "typeof")}} est qu'il ne renverra pas d'erreur si la variable n'a pas été définie :</p>

<pre class="brush: js">// x n'a pas encore été défini
if (typeof x === 'undefined') { // donnera true sans erreur
   // ces instructions seront exécutées
}

if (x === undefined) { // déclenche une ReferenceError

}
</pre>

<h3 id="L'opérateur_void_et_undefined">L'opérateur <code>void</code> et <code>undefined</code></h3>

<p>L'opérateur {{jsxref("Opérateurs/L_opérateur_void", "void")}} est une troisième solution.</p>

<pre class="brush: js">var x;
if (x === void 0) {
   // ces instructions seront exécutées
}

// y n'a pas été défini avant
if (y === void 0) {
   // déclenche une ReferenceError: y is not defined
   // (contrairement à `typeof`)
}
</pre>

<h2 id="Spécifications">Spécifications</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Spécification</th>
   <th scope="col">État</th>
   <th scope="col">Commentaires</th>
  </tr>
  <tr>
   <td>{{SpecName('ES1', '#sec-4.3.9', 'undefined')}}</td>
   <td>{{Spec2('ES1')}}</td>
   <td>Définition initiale. Implémentée avec JavaScript 1.3.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES5.1', '#sec-15.1.1.3', 'undefined')}}</td>
   <td>{{Spec2('ES5.1')}}</td>
   <td> </td>
  </tr>
  <tr>
   <td>{{SpecName('ES6', '#sec-undefined', 'undefined')}}</td>
   <td>{{Spec2('ES6')}}</td>
   <td> </td>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-undefined', 'undefined')}}</td>
   <td>{{Spec2('ESDraft')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2>

<div class="hidden">Ce tableau de compatibilité a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à envoyer une <em>pull request</em> sur <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</div>

<p>{{Compat("javascript.builtins.undefined")}}</p>