Se você estiver declarando implicitamente a variável sem var, a maneira correta seria usar delete foo.
No entanto, após a exclusão, se você tentar usá-lo em uma operação como a adição a ReferenceError, será lançada porque você não pode adicionar uma string a um identificador não declarado e indefinido. Exemplo:
x = 5;
delete x
alert('foo' + x )
// ReferenceError: x is not defined
Em algumas situações, pode ser mais seguro atribuí-lo a falso, nulo ou indefinido, para que seja declarado e não gerará esse tipo de erro.
foo = false
Note que no ECMAScript null, false, undefined, 0, NaN, ou ''que todos avaliar a false. Apenas certifique-se de não usar o !==operador; em vez disso, !=ao digitar booleanos e não desejar a verificação de identidade (o nullfaria == falseefalse == undefined ).
Observe também que deletenão "exclui" referências, mas apenas propriedades diretamente no objeto, por exemplo:
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 você declarou uma variável com, varnão pode excluí-la:
(function() {
var x = 5;
alert(delete x)
// false
})();
No Rhino:
js> var x
js> delete x
false
Também não é possível excluir algumas propriedades predefinidas, como Math.PI:
js> delete Math.PI
false
Existem algumas exceções estranhas a deletequalquer idioma, se você se importa o suficiente, você deve ler:
varfora de uma função) são propriedades do "objeto global", que é o que ocorre nos navegadores da webwindow. Então -var a = 1; delete window.a; console.log(a);excluirá a variável com êxito e fará com que a última linha emita um erro de referência.