Se stai dichiarando implicitamente la variabile senza var
, il modo corretto sarebbe usare delete foo
.
Tuttavia, dopo averlo eliminato, se si tenta di utilizzarlo in un'operazione come l'aggiunta a ReferenceError
verrà generata perché non è possibile aggiungere una stringa a un identificatore non dichiarato e non definito. Esempio:
x = 5;
delete x
alert('foo' + x )
// ReferenceError: x is not defined
In alcune situazioni potrebbe essere più sicuro assegnarlo a false, null o indefinito, quindi viene dichiarato e non genererà questo tipo di errore.
foo = false
Si noti che in ECMAScript null
, false
, undefined
, 0
, NaN
, o ''
sarebbero tutti a valutare false
. Assicurati solo di non usare l' !==
operatore ma invece !=
quando controlli il tipo per i booleani e non vuoi il controllo dell'identità (così null
farebbe == false
e false == undefined
).
Si noti inoltre che delete
non "elimina" riferimenti ma solo proprietà direttamente sull'oggetto, ad esempio:
bah = {}, foo = {}; bah.ref = foo;
delete bah.ref;
alert( [bah.ref, foo ] )
// ,[object Object] (it deleted the property but not the reference to the other object)
Se hai dichiarato una variabile con var
non puoi eliminarla:
(function() {
var x = 5;
alert(delete x)
// false
})();
In Rhino:
js> var x
js> delete x
false
Né è possibile eliminare alcune proprietà predefinite come Math.PI
:
js> delete Math.PI
false
Ci sono alcune strane eccezioni delete
come con qualsiasi lingua, se ti interessa abbastanza dovresti leggere:
var
al di fuori di una funzione) sono proprietà dell '"oggetto globale", come nei browser Webwindow
. Quindi -var a = 1; delete window.a; console.log(a);
eliminerà correttamente la variabile e causerà un errore di riferimento nell'ultima riga.