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?

Foi útil?

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

  1. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top