1. Variables
En ce qui concerne l'opérateur de suppression en JavaScript, nous devons d'abord déterminer la relation entre les variables et les attributs en JavaScript.
Dans JavaScript, la relation entre les variables et les attributs d'objet est très subtile, et elle peut même être assimilée plusieurs fois, car JavaScript créera un objet global avant d'exécuter le script, qui est un objet de fenêtre dans le navigateur. Toutes les variables globales sont des attributs de cet objet global. Lors de l'exécution de la fonction, un objet d'activation sera également créé. Toutes les variables locales sont des attributs de cet objet d'activation. Vous pouvez en apprendre davantage sur la portée et les fermetures JavaScript.
La copie de code est la suivante:
// Les attributs déclarés dans le prototype ne peuvent pas être supprimés
var global = 1;
ce.global; // 1, vous pouvez accéder aux objets globaux à travers ce
this.global2 = 2;
Global2; // 12
fonction foo () {
var local = 36;
// Cependant, l'activation ne peut pas être accessible directement.
// Par conséquent, la variable locale ne peut pas être accessible via foo.local
}
Il semble que les variables soient équivalentes aux propriétés d'objets, mais en fait, elles ne sont pas les mêmes, du moins pour l'opérateur de suppression. Ma compréhension est que les déclarations variables doivent être terminées via des instructions VAR. Les variables globales qui ne sont pas déclarées via des instructions VAR sont toutes des propriétés des objets de fenêtre. Cela facilite la compréhension de la relation entre les variables et les propriétés des objets.
2. Supprimer l'opérateur
L'opérateur de suppression est utilisé pour supprimer les propriétés de l'objet. Pour les valeurs de type de référence, il supprime également les propriétés de l'objet elles-mêmes et ne supprime pas l'objet pointé par la propriété. Si vous avez des questions, vous pouvez consulter les valeurs du type de base et du type de référence, ou tester le code suivant:
La copie de code est la suivante:
var o = {};
var a = {x: 10};
oa = a;
supprimer OA; // L'attribut OA est supprimé
console.log (OA); // indéfini
Console.log (AX); // 10, car l'objet {x: 10} est toujours référencé par A, donc il ne sera pas recyclé
De plus, la suppression du bœuf peut également être écrite comme supprime o ["x"], et les effets des deux sont les mêmes.
3. Les variables ne peuvent pas être supprimées
Les variables déclarées par VAR et les fonctions déclarées par fonction ont la fonctionnalité Dontdelete et ne peuvent pas être supprimées. Variables globales non déclarées via VAR (propriétés des objets globaux)
La copie de code est la suivante:
var global = {
R: 123,
b: {
C: 1345
}
};
supprimer global; //Invalide
console.log (global)
obj = {
R: 123
};
supprimer obj; // Supprimer les variables globales OBJ, l'attribut obj de l'objet Window
console.log (obj); // obj n'est pas défini
4. Les attributs déclarés dans le prototype et les attributs fournis avec l'objet ne peuvent pas être supprimés.
Les attributs déclarés dans le prototype prototype et les attributs fournis avec l'objet (en fait, ces attributs sont également dans le prototype prototype) peuvent être considérés comme ayant les caractéristiques de Dontdelete et ne peuvent pas être supprimés. Par exemple
La copie de code est la suivante:
// Les attributs déclarés dans le prototype ne peuvent pas être supprimés
fonction obj () {
this.x = 1;
}
obj.prototype.x = 2;
var o = new obj ();
console.log (OX); // 1, Ox défini dans le constructeur
supprimer le bœuf;
console.log (OX); // 2, Ox défini dans le prototype, même si la suppression du bœuf est à nouveau exécutée, elle ne sera pas supprimée.
// Les attributs qui viennent avec l'objet ne peuvent pas être supprimés
var strings = "123456";
console.log (Strings.length); // 6
supprimer Strings.Length;
console.log (Strings.length); // c'est toujours 6
5. Plusieurs exceptions dans l'évaluation EVAL
Dans le code exécuté par EVAL, bien que les variables déclarées par VAR appartiennent aux objets globaux en tant que variables VAR normales déclarées, ils n'ont pas l'attribut DontDelete et peuvent être supprimés. Cependant, les variables définies par VAR dans la fonction du code EVAL ont DESTDELETE et ne peuvent pas être supprimées.
La copie de code est la suivante: EVAL ("var x = 42;");
x; // => 42
supprimer x;
x; // => ReferenceError: x n'est pas défini
eval ("function f () {return 12;}");
f (); // => 12
supprimer f;
f (); // => ReferenceError: F n'est pas défini
// Dans le code exécuté par EVAL, bien que la variable déclarée par VAR appartient à l'objet global comme variables VAR normales,
// Mais ils n'ont pas la fonctionnalité Dontdelete et peuvent être supprimés.
eval ("(function () {" +
"var x = 42;" +
"Delete x;" +
"retour x;" +
"}) ();")
// => 42
// La variable définie par var dans la fonction dans le code EVAL a netdelete et ne peut pas être supprimée.
6. La valeur de retour de la suppression
Delete est un opérateur normal et renverra True ou False. Retour false lorsque la propriété de l'objet supprimé existe et a dondelete, autrement vrai. Une fonctionnalité ici est que lorsque l'attribut objet n'existe pas, il renvoie vrai, donc la valeur de retour n'est pas exactement équivalente à la réussite de la suppression ou non.
La copie de code est la suivante:
fonction c () {
this.x = 42;
}
c.prototype.y = 12;
var o = new C ();
supprimer le bœuf; // vrai
bœuf; // indéfini
"x" dans o; // FAUX
// ox existe et n'a pas DonTDelete, renvoie true
supprimer oy; // vrai
Oy; // 12
// o lui-même n'a pas d'attribut OY, donc il renvoie vrai
// d'ici, vous pouvez également voir l'existence de la chaîne prototype. Les propres attributs et attributs de prototypes de l'objet sont différents.
supprimer o; // FAUX
// global.o a la fonctionnalité Dontdelete donc renvoie false
supprimer une propriété indéfinie; // vrai
// Global n'a pas de propriété nommée UndefinedProperty donc renvoie True
supprimer 42; // vrai
// 42 n'est pas une propriété, donc renvoie vrai. Certaines implémentations lanceront des exceptions (violer la norme ECMAScript)
var x = 24;
supprimer x ++; // vrai
x; // 25
// Ce qui est supprimé, c'est la valeur de retour de x ++ (24), pas une propriété, donc il renvoie True