aboutsummaryrefslogtreecommitdiff
path: root/files/ca/web/javascript/reference/global_objects/undefined/index.html
blob: e00aa3008d6e344f7e3e187ba6e451ea426d2010 (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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
---
title: undefined
slug: Web/JavaScript/Reference/Global_Objects/undefined
translation_of: Web/JavaScript/Reference/Global_Objects/undefined
original_slug: Web/JavaScript/Referencia/Objectes_globals/undefined
---
<div>
<div>
<div>{{jsSidebar("Objects")}}</div>
</div>
</div>

<h2 id="Summary" name="Summary">Resum</h2>

<p>El valor de la propietat global <code><strong>undefined</strong></code> representa el valor <code>undefined</code>. És un dels {{Glossary("Primitive", "tipus primitius")}} de JavaScript.</p>

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

<h2 id="Syntax" name="Syntax">Sintaxi</h2>

<pre class="syntaxbox"><code>undefined</code></pre>

<h2 id="Description" name="Description">Descripció</h2>

<p><code>undefined</code> és una propietat de l'<em>objecte global</em>, és a dir, és una variable dins l'àmbit global.</p>

<p>Als navegadors moderns (JavaScript 1.8.5 / Firefox 4+), <code>undefined</code> és una propietat no configurable i que no pot ser escrita, tal com denota la especificació ECMAScript 5. Encara que no sigui el cas, és convenient evitar sobreescriure el seu valor.</p>

<p>Una variable a la que no s'ha assignat cap valor  és de tipus <code>undefined</code>. Un mètode o sentència retornarà <code>undefined</code> si la variable que s'evalua no te assignat cap valor. Una funció retornarà <code>undefined</code> si no es {{jsxref("Statements/return", "retorna")}} un valor explícitament.</p>

<p>Degut a que <code>undefined</code> no és una {{jsxref("Reserved_Words", "paraula reservada")}} es pot emprar com a <a href="/ca/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Variables">identificador</a> (nom de variable) a qualsvol àmbit que no sigui el global.</p>

<pre class="brush: js">// mostra "foo string"
(function(){ var undefined = 'foo'; console.log(undefined, typeof undefined); })();

// mostra "foo string"
(function(undefined){ console.log(undefined, typeof undefined); })('foo');
</pre>

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

<h3 id="Igualtat_estricta_i_undefined">Igualtat estricta i <code>undefined</code></h3>

<p>Es pot emprar <code>undefined</code> en combinació amb els operadors de igualtat i no-igualtat per determinar si una variable té assignat un valor.</p>

<pre class="brush: js">var x;
if (x === undefined) {
   // sentències que s'executaran
}
else {
   // sentències que no s'executaran
}
</pre>

<div class="note">Nota: En aquest cas s'ha de fer servir l'operador d'igualtat estricta (<code>===</code>) en comptes de l'operador standard d'igualtat (<code>==</code>) ja que <code>x == undefined</code> també comprova si <code>x</code> és <code>null</code>, mentre que l'operador d'igualtat estricta no ho fa. <code>null</code> no és equivalent a <code>undefined</code>. Per més detalls vegeu {{jsxref("Operators/Comparison_Operators", "comparació d'operadors")}}.</div>

<h3 id="L'operador_Typeof_i_undefined"><code>L'operador Typeof</code> i <code>undefined</code></h3>

<p>De forma alternativa, es pot emprar {{jsxref("Operators/typeof", "typeof")}}:</p>

<pre class="brush: js">var x;
if (typeof x === 'undefined') {
   // sentències que s'executaran
}
</pre>

<p>Una raó per utilitzar {{jsxref("Operators/typeof", "typeof")}} és que no provoca un error si la variable no ha estat definida prèviament.</p>

<pre class="brush: js">// x no ha estat prèviament definida
if (typeof x === 'undefined') { // s'evalua a true sense errors
   // sentències que s'executaran
}

if(x === undefined){ // llença ReferenceError

}
</pre>

<p>De totes formes és recomanable evitar l'ús d'aquest tipus de tècniques. JavaScript és un llenguatge amb àmbits estàtics, de manera que per saber si una variable ha estat definida prèviament n'hi ha prou amb comprovar si ha estat definida dins l'àmbit immediat. L'única excepció és l'àmbit global. Aquest, però, està vinculat a l'objecte global, per la qual cosa comprovar si una variable existeix dins l'àmbit global és equivalent a comprovar l'existència d'una propietat dins l'objecte global (emprant l'operador {{jsxref("Operators/in", "in")}}, per exemple).</p>

<h3 id="L'operador_Void_i_undefined"><code>L'operador Void</code> i <code>undefined</code></h3>

<p>L'operador {{jsxref("Operators/void", "void")}} és una altra alternativa.</p>

<pre class="brush: js">var x;
if (x === void 0) {
   // sentències que s'executaran
}

// y no ha estat definida prèviament
if (y === void 0) {
   // llença ReferenceError (en oposició a `typeof`)
}
</pre>

<h2 id="Especificacions">Especificacions</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Especificació</th>
   <th scope="col">Estat</th>
   <th scope="col">Comentaris</th>
  </tr>
  <tr>
   <td>ECMAScript 1st Edition.</td>
   <td>Standard</td>
   <td>Definició inicial. Impementat a 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>
 </tbody>
</table>

<h2 id="Compatibilitat_amb_navegadors">Compatibilitat amb navegadors</h2>

<p>{{ CompatibilityTable() }}</p>

<div id="compat-desktop">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Característica</th>
   <th>Chrome</th>
   <th>Firefox (Gecko)</th>
   <th>Internet Explorer</th>
   <th>Opera</th>
   <th>Safari</th>
  </tr>
  <tr>
   <td>Suport bàsic</td>
   <td>{{ CompatVersionUnknown() }}</td>
   <td>{{ CompatVersionUnknown() }}</td>
   <td>{{ CompatVersionUnknown() }}</td>
   <td>{{ CompatVersionUnknown() }}</td>
   <td>{{ CompatVersionUnknown() }}</td>
  </tr>
 </tbody>
</table>
</div>

<div id="compat-mobile">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Característica</th>
   <th>Android</th>
   <th>Chrome for Android</th>
   <th>Firefox Mobile (Gecko)</th>
   <th>IE Mobile</th>
   <th>Opera Mobile</th>
   <th>Safari Mobile</th>
  </tr>
  <tr>
   <td>Suport bàsic</td>
   <td>{{ CompatVersionUnknown() }}</td>
   <td>{{ CompatVersionUnknown() }}</td>
   <td>{{ CompatVersionUnknown() }}</td>
   <td>{{ CompatVersionUnknown() }}</td>
   <td>{{ CompatVersionUnknown() }}</td>
   <td>{{ CompatVersionUnknown() }}</td>
  </tr>
 </tbody>
</table>
</div>

<p> </p>