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 null
faria == false
efalse == undefined
).
Observe também que delete
nã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, var
nã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 delete
qualquer idioma, se você se importa o suficiente, você deve ler:
var
fora 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.