--- title: undefined slug: Web/JavaScript/Reference/Global_Objects/undefined translation_of: Web/JavaScript/Reference/Global_Objects/undefined ---
La variabile globale undefined
rappresenta il valore primitivo {{Glossary("Undefined", "undefined")}}. È uno dei {{Glossary("Primitive", "valori primitivi")}} di JavaScript.
{{js_property_attributes(0,0,0)}}
undefined
undefined
è una proprietà dell'oggetto globale, ossia una variablie nel contesto globale. Il valore iniziale di undefined
è il valore primitivo {{Glossary("Undefined", "undefined")}}.
Secondo la specifica ECMAScript5, undefined
è accessibile in sola lettura (implementato in JavaScript 1.8.5 / Firefox 4).
Una variabile alla quale non è ancora stato assegnato un valore è di tipo undefined. Un metodo o una dichiarazione restituisce undefined
se la variabile che viene valutata non ha un valore assegnato. Una funzione restituisce undefined
se non viene restituito un altro valore.
Siccome undefined
non è una {{jsxref("Reserved_Words", "parola riservata")}}, può essere usato come nome di una variabile in qualsiasi contesto, eccetto quello globale.
// logs "foo string" (function(){ var undefined = 'foo'; console.log(undefined, typeof undefined); })(); // logs "foo string" (function(undefined){ console.log(undefined, typeof undefined); })('foo');
undefined
e l'uguaglianza ristrettaPuoi usare undefined
e gli operatori "strettamente uguale" e "strettamente diverso" per determinare se ad una variabile è stato assegnato un valore. In questo codice, la variabile x
non è definita, qundi l'istruzione if
viene valutata vera.
var x; x === undefined; // true
x == undefined
è vero anche se x
è null
, mentre confrontandoli con l'ugualianza stretta no. null
e undefined
non sono equivalenti. Vedi gli {{jsxref("Operators/Comparsion_Operators", "operatori di comparazione")}} per altri dettagli.undefined
e l'operatore typeof
In alternativa può anche essere usato l'operatore {{jsxref("Operators/typeof", "typeof")}}:
var x; typeof x === 'undefined'; // true
Un motivo per cui usare l'operatore {{jsxref("Operators/typeof", "typeof")}}
è che se la variabile non stata dichiarata non viene generato un errore.
// x non è ancora stata dichiarata typeof x === "undefined"; // viene valutata come vera, senza generare erroi x === undefined; // genera un ReferenceError
Comunque questa tecnica dovrebbe essere evitata. JavaScript è un linguaggio staticamente contestualizzato, quindi si può sapere se una variabile è stata dichiarata in un contesto guardando in quelli che lo contengono. L'unica eccezione è il contesto globale, che è rappresentato dall'oggetto globale: quindi per sapere se esiste una variabile basta controllare se esiste una proprietà nell'oggetto globale (per esempio usando l'operatore {{jsxref("Operators/in", "in")}} o il metodo {{jsxref("Global_Objects/Object/hasOwnProperty", "hasOwnProperty")}})
// x non è ancora stata dichiarata "x" in window; // false window.hasOwnProperty("x"); // false var x = 3; "x" in window; // true window.hasOwnProperty("y"); // true
undefined
e l'operatore void
Una terza alternativa è l'operatore {{jsxref("Operators/void", "void
")}}.
var x; x === void 0; // true // y non è ancora stata dichiarata y === void 0; // genera un ReferenceError (a differenza di `typeof`)
Specification | Status | Comment |
---|---|---|
ECMAScript 1st Edition. | Standard | Definizione iniziale. Implementato in JavaScript 1.3 |
{{SpecName('ES5.1', '#sec-15.1.1.3', 'undefined')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-undefined', 'undefined')}} | {{Spec2('ES6')}} |
{{CompatibilityTable}}
Funzionalità | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Supporto di base | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Funzionalità | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Supporto di base | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |