Sommario
La variabile globale undefined rappresenta il valore primitivo undefined. È uno dei valori primitivi di JavaScript.
Property attributes of undefined |
|
|---|---|
| Writable | no |
| Enumerable | no |
| Configurable | no |
Sintassi
undefined
Descrizione
undefined è una proprietà dell'oggetto globale, ossia una variablie nel contesto globale. Il valore iniziale di undefined è il valore primitivo 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 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');
Esempi
undefined e l'uguaglianza ristretta
Puoi 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 operatori di comparazione per altri dettagli.undefined e l'operatore typeof
In alternativa può anche essere usato l'operatore typeof:
var x; typeof x === 'undefined'; // true
Un motivo per cui usare l'operatore è che se la variabile non stata dichiarata non viene generato un errore.typeof
// 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 in o il metodo 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 <code>void</code>.
var x; x === void 0; // true // y non è ancora stata dichiarata y === void 0; // genera un ReferenceError (a differenza di `typeof`)
Specifications
| Specification | Status | Comment |
|---|---|---|
| ECMAScript 1st Edition. | Standard | Definizione iniziale. Implementato in JavaScript 1.3 |
| ECMAScript 5.1 (ECMA-262) The definition of 'undefined' in that specification. |
Standard | |
| ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'undefined' in that specification. |
Standard |
Compatibilità con i browser
| Funzionalità | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Supporto di base | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
| Funzionalità | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Supporto di base | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |