Propriedade DontDelete de objetos javascript
-
12-11-2019 - |
Pergunta
De acordo com a especificação EcmaScript, algumas propriedades de objetos não podem ser excluídas devido ao parâmetro interno DontDelete.Por exemplo :
var y = 5
não deve ser deletável.Mas pelo que pude verificar - é.
Aqui está um link no Mozilla Developer Center:https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete
Alguma idéia de por que isso não está funcionando como deveria?
Solução
Às vezes você tem que verificar o que lê.Não há DontDelete
parâmetro interno na especificação ECMA (262, ed 5).Talvez o [Configurable
] propriedade se refere?O delete
operador não funciona em variáveis ou funções, funciona em propriedades de objetos:
var y=5,
z = {y:5};
delete y;
delete z.y;
alert(y); //=> 5
alert(z.y); //=> undefined
Da minha resposta, isso Então pergunta surgiu e uma excelente resposta de T.J.Multidão.
Outras dicas
De acordo com a tabela ES5 17:
CriarMutableBinding(N, D)Crie uma nova ligação mutável em um registro de ambiente.O valor da string n é o texto do nome ligado.Se o argumento booleano opcional D for verdadeiro, a ligação poderá ser posteriormente excluída.
e em 10.5 Instanciação vinculativa de declaração
- Para cada variabledeclaration e variabledClarationNoin D no código, na ordem de texto de origem do [...] ii.Chame o método de concreto SetMutable de Env Passando DN, indefinido e rigoroso como os argumentos.
O que me diz que as variáveis declaradas não devem ser excluíveis.No código global, o objeto global é o objeto de ativação que é a variável obejct, portanto, os globais declarados não devem ser deletáveis.É claro que os navegadores podem não aderir a isso...
var y = 5
alert(delete (y));
Mostrar falso.Então, não pode ser excluído.