Come controllare lindefinito in JavaScript

Quando una variabile viene dichiarata senza che gli sia stato assegnato un valore, il suo valore iniziale è undefined.

Come controlli se un valore è undefined in JavaScript?

La risposta breve

Nei browser moderni puoi confrontare in sicurezza la variabile direttamente a undefined:

Alcune persone si oppongono al confronto con undefined perché i vecchi browser consentivano di riassegnare il suo valore in questo modo:

Dopo quella riassegnazione, confronto con undefined direttamente non rileva più correttamente se a una variabile è stato assegnato un valore.

Tuttavia, questo comportamento è stato corretto nel 2009 con ECMAScript 5:

Nei browser moderni ” Non è più possibile riassegnare il valore globale undefined.

E se avessi bisogno di supportare IE8 e versioni precedenti?

In generale, confrontando direttamente con un definito è ancora sicuro. Non cè motivo pratico per unapplicazione per riassegnare il valore di undefined.

Thomas Eding lo dimostra con unanalogia convincente:

Se sei ancora preoccupato, ci sono due modi per controllare se un valore non è definito anche se il undefined globale è stato sovrascritto.

Puoi usare il operatore void per ottenere il valore di undefined. Funzionerà anche se il valore globale window.undefined è stato sovrascritto:

Lo zero in questo esempio non “ha alcun significato speciale, potresti anche usare 1 o function(){}. void(anything) restituirà sempre undefined.

In alternativa, puoi utilizzare loperatore typeof per verificare in sicurezza se un valore è stato assegnato. Invece di confrontare il valore globale undefined, controlla se il valore “tipo s è” undefined “:

Tieni presente che questo è leggermente diverso dalle opzioni precedenti. Anche se name non fosse stato dichiarato typeof, sarebbe ancora “non definito”. Se confronti una variabile non dichiarata con undefined o void(0), otterrai invece un ReferenceError.

Ma non “t usa direttamente void (0)

Evita di usare void(0) o typeof x === "undefined" letteralmente nel codice. Queste espressioni non sono autoesplicative e dovrebbero essere racchiuse in una funzione isUndefined come questa:

Molte librerie di utilità hanno già questa funzionalità incorporata, ad esempio cè un _.isUndefined funzione in Underscore.js.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *