1. Variáveis
Quando se trata do operador Excluir em JavaScript, devemos primeiro descobrir a relação entre variáveis e atributos no JavaScript.
No JavaScript, a relação entre variáveis e atributos de objeto é muito sutil e pode até ser equiparada muitas vezes, porque o JavaScript criará um objeto global antes de executar o script, que é um objeto de janela no navegador. Todas as variáveis globais são atributos desse objeto global. Ao executar a função, um objeto de ativação também será criado. Todas as variáveis locais são atributos desse objeto de ativação. Você pode aprender sobre esse escopo e fechamentos JavaScript.
A cópia do código é a seguinte:
// Os atributos declarados no protótipo não podem ser excluídos
var global = 1;
this.global; // 1, você pode acessar objetos globais através deste
this.global2 = 2;
global2; // 12
function foo () {
var local = 36;
// No entanto, a ativação não pode ser acessada diretamente.
// Portanto, a variável local não pode ser acessada através de foo.local
}
Parece que as variáveis são equivalentes às propriedades de objeto, mas, na verdade, não são as mesmas, pelo menos para o operador de exclusão. Meu entendimento é que as declarações variáveis devem ser concluídas por meio de declarações VAR. Variáveis globais que não são declaradas através de declarações VAR são todas as propriedades dos objetos da janela. Isso facilita o entendimento da relação entre variáveis e propriedades de objeto.
2. Excluir operador
O operador de exclusão é usado para excluir propriedades do objeto. Para valores de tipo de referência, ele também exclui as próprias propriedades do objeto e não exclui o objeto apontado pela propriedade. Se você tiver alguma dúvida, pode examinar os valores do tipo básico e do tipo de referência ou testar o seguinte código:
A cópia do código é a seguinte:
var o = {};
var a = {x: 10};
oa = a;
excluir OA; // atributo OA é excluído
console.log (OA); // indefinido
console.log (AX); // 10, porque o objeto {x: 10} ainda é referenciado por a, por isso não será reciclado
Além disso, a exclusão de boi também pode ser escrita como excluir o ["x"], e os efeitos de ambos são os mesmos.
3. As variáveis não podem ser excluídas
As variáveis declaradas pelo VAR e funções declaradas pela função têm o recurso DONTDELETE e não podem ser excluídas. Variáveis globais não declaradas via Var (Propriedades dos objetos globais)
A cópia do código é a seguinte:
var global = {
A: 123,
B: {
C: 1345
}
};
excluir global; //Inválido
console.log (global)
obj = {
A: 123
};
excluir obj; // Exclua variáveis globais OBJ, atributo obj do objeto de janela
console.log (obj); // obj não está definido
4. Os atributos declarados no protótipo e os atributos que acompanham o objeto não podem ser excluídos.
Os atributos declarados no protótipo protótipo e os atributos que acompanham o objeto (na verdade, esses atributos também estão no protótipo protótipo) podem ser considerados como tendo as características do DONTDELETE e não podem ser excluídas. Por exemplo
A cópia do código é a seguinte:
// Os atributos declarados no protótipo não podem ser excluídos
função obj () {
this.x = 1;
}
obj.prototype.x = 2;
var o = novo obj ();
console.log (OX); // 1, Ox definido no construtor
excluir boi;
console.log (OX); // 2, Ox definido no protótipo, mesmo que o OX excluído seja executado novamente, ele não será excluído.
// Os atributos que acompanham o objeto não podem ser excluídos
var strings = "123456";
console.log (strings.length); // 6
excluir strings.length;
console.log (strings.length); // ainda é 6
5. Várias exceções sob a declaração de avaliação
No código executado por avaliação, embora as variáveis declaradas pelo VAR pertencem a objetos globais como variáveis declaradas normais do VAR, elas não têm o atributo nãoDELETE e podem ser excluídas. No entanto, as variáveis definidas pelo VAR na função no código de avaliação não têm e não podem ser excluídas.
A cópia do código é a seguinte: Eval ("var x = 42;");
x; // => 42
excluir x;
x; // => ReferenceError: x não está definido
avaliar ("função f () {return 12;}");
f (); // => 12
excluir f;
f (); // => ReferenceError: f não está definido
// No código executado por avaliação, embora a variável declarada pelo VAR pertence ao objeto global como variáveis declaradas normais de var,
// mas eles não têm o recurso DONTDELETE e podem ser excluídos.
Eval ("(function () {" +
"var x = 42;" +
"Excluir x;" +
"Retornar x;" +
"}) ();")
// => 42
// A variável definida pelo VAR na função no código de avaliação não deve e não pode ser excluída.
6. O valor de retorno da exclusão
A exclusão é um operador normal e retornará verdadeiro ou falso. Retorne falso quando a propriedade do objeto excluído existir e tiver dondelete, caso contrário, verdadeiro. Um recurso aqui é que, quando o atributo de objeto não existe, ele retorna true, portanto o valor de retorno não é exatamente equivalente a se a exclusão é bem -sucedida ou não.
A cópia do código é a seguinte:
função c () {
this.x = 42;
}
c.prototype.y = 12;
var o = novo c ();
excluir boi; // verdadeiro
boi; // indefinido
"X" em O; // false
// Ox existe e não tem doNTDELETE, retorna verdadeiro
excluir oy; // verdadeiro
oy; // 12
// o em si não tem um atributo OY, então ele retorna verdadeiro
// A partir daqui, você também pode ver a existência da cadeia de protótipo. Os próprios atributos e protótipo do objeto são diferentes.
excluir o; // false
// global.o tem o recurso DONTDELETE, então retorna falsa
Excluir a propriedade indefinida; // verdadeiro
// Global não possui uma propriedade chamada UndefinedProperty, então retorna true
excluir 42; // verdadeiro
// 42 não é uma propriedade, então retorna true. Algumas implementações lançarão exceções (viole o padrão Ecmascript)
var x = 24;
exclua x ++; // verdadeiro
x; // 25
// O que é excluído é o valor de retorno de x ++ (24), não uma propriedade, por isso retorna verdadeiro