


Supprimer et supprimer les opérateurs dans les compétences javascript_javascript
May 16, 2016 pm 03:32 PMAlors, pourquoi peut-on supprimer les attributs d'un objet?:
var x = { a: 1 }; delete x.a; // true x.a; // undefined
Mais vous ne pouvez pas supprimer une variable?:
var x = 1; delete x; // false; x; // 1
Vous ne pouvez pas non plus supprimer une fonction?:
function x() {}; delete x; // false; typeof x; // "function"
Remarque?: delete ne renvoie false que si une propriété ne peut pas être supprimée.
Chaque attribut a de zéro à plusieurs attributs internes - *ReadOnly, DontEnum, DontDelete et Internal**. Vous pouvez les considérer comme des balises : une propriété peut ou non avoir une propriété interne spéciale. Pour la discussion d'aujourd'hui, nous nous intéressons à DontDelete.
Lorsque les variables et les fonctions sont déclarées, elles deviennent des propriétés de l'objet Variable, soit l'objet d'activation (dans le code de fonction), soit l'objet global (dans le code global). Ces propriétés sont accompagnées de La propriété interne DontDelete est générée. Cependant, les propriétés attribuées explicitement/implicitement ne génèrent pas de DontDelete. Et c'est essentiellement pourquoi nous pouvons supprimer certaines propriétés mais pas d'autres.
var GLOBAL_OBJECT = this;
/* 'foo' est une propriété de l'objet global, qui est générée via une déclaration de variable, elle a donc la propriété interne DontDelete
C'est pourquoi il ne peut pas être supprimé*/
var foo = 1; delete foo; // false typeof foo; // "number" /* 'bar
' est une propriété de l'objet global, qui est générée via une déclaration de variable, elle a donc l'enfant DontDelete
C'est pourquoi il ne peut pas non plus être supprimé*/
function bar() {}; delete bar; // false typeof bar; // "function"
/* 'baz' est aussi une propriété de l'objet global,
Cependant, il est généré via l'affectation de propriétés, il n'y a donc pas de DontDelete
C'est pourquoi il peut être supprimé*/
GLOBAL_OBJECT.baz = "baz"; delete GLOBAL_OBJECT.baz; // true typeof GLOBAL_OBJECT.baz; // "undefined"
1.5, intégrés et DontDelete | Intégrés et DontDelete
C'est pourquoi tout cela se produit?: une propriété interne spéciale d'une propriété contr?le si la propriété peut ou non être supprimée. Remarque?: Certaines propriétés des objets intégrés ont la propriété interne DontDelete et ne peuvent donc pas être supprimées?; les variables d'arguments spéciaux (comme nous le savons, les propriétés des objets activés) ont également la propriété length (longueur du paramètre de retour) de toute instance de fonction?; Ne pas supprimer?:
(function() { //不能刪除'arguments',因為有DontDelete delete arguments; // false; typeof arguments; // "object" //也不能刪除函數(shù)的length,因為有DontDelete function f() {}; delete f.length; // false; typeof f.length; // "number" }) ();
Les propriétés associées aux arguments de la fonction ont également DontDelete et ne peuvent pas non plus être supprimées
(function(foo,bar) { delete foo; // false foo; // 1 delete bar; // false bar; // "bah" }) (1,"bah");
1.6. Affectations de variables non déclarées | Affectations non déclarées
Vous vous souvenez peut-être qu'une affectation de variable non déclarée devient une propriété de l'objet global à moins que la propriété ne se trouve ailleurs dans la cha?ne de portée. Et maintenant, nous comprenons la différence entre l'affectation de propriété et la déclaration de variable - cette dernière génère DontDelete et la première non - c'est pourquoi les affectations de variables non déclarées peuvent être supprimées.
var GLOBAL_OBJECT = this; /* 通過變量聲明生成全局對象的屬性,擁有DontDelete */ var foo = 1; /* 通過未聲明的變量賦值生成全局對象的屬性,沒有DontDelete */ bar = 2; delete foo; // false delete bar; // true
Remarque?: les attributs internes sont déterminés lors de la génération des attributs, et les processus d'affectation ultérieurs ne modifieront pas les attributs internes des attributs existants. Il est important de comprendre cette distinction.
/* 'foo'創(chuàng)建的同時生成DontDelete */ function foo() {}; /* 之后的賦值過程不改變已有屬性的內(nèi)部屬性,DontDelete仍然存在 */ foo = 1; delete foo; // false; typeof foo; // "number" /* 但賦值一個不存在的屬性時,創(chuàng)建了一個沒有內(nèi)部屬性的屬性,因此沒有DontDelete */ this.bar = 1; delete bar; // true; typeof bar; // "undefined"
Résumé?:
Les déclarations de variables et de fonctions sont des propriétés de l'objet global Activation.
Les propriétés ont des propriétés internes, dont l'une - DontDelete - est chargée de déterminer si une propriété peut être supprimée.
Les variables et déclarations de fonctions dans le code global ou le code de fonction génèrent toutes des attributs avec DontDelete.
Les paramètres de fonction sont également des attributs de l'objet d'activation et ont également DontDelete.
Supprimer les attributs dans l'objet?: delete object.member
Vous ne pouvez supprimer que vos propres membres
Seules les variables globales déclarées avec var ne peuvent pas être supprimées
Les membres globaux ajoutés à l'aide de window ou window[""] peuvent être supprimés
.
ps : opérateur de suppression en Javascript
Supprimer est l'une des opérations les moins fréquemment utilisées dans le langage Javascript, mais parfois, lorsque nous devons effectuer des actions de suppression ou d'effacement, nous avons besoin de l'opération de suppression. Dans cet article, nous verrons comment l’utiliser et comment il fonctionne.
Le but de la suppression, comme vous le pensez, est de supprimer quelque chose. Plus précisément, cela supprimera les attributs de l'objet, comme dans l'exemple suivant :
var Benjamin = { "name": "zuojj", "url" : "http://www.zuojj.com" }; delete Benjamin.name; //Outputs: Object { url: "http://www.zuojj.com" } console.log(Benjamin);
delete ne supprimera pas les variables ordinaires, comme dans l'exemple suivant?:
var benjamin = "http://www.zuojj.com"; delete benjamin; //Outputs: "http://www.zuojj.com" console.log(benjamin);
Cependant, il peut supprimer les "variables globales" car ce sont en fait des propriétés de l'objet global (fenêtre dans les navigateurs).
// Because var isn't used, this is a property of window benjamin = "zuojj"; delete window.benjamin; // ReferenceError: benjamin is not defined console.log(benjamin);
delete a également une valeur de retour. Si la suppression d'un attribut réussit, il renvoie true. Si l'attribut ne peut pas être supprimé car il n'est pas accessible en écriture, il renverra false ou générera une erreur s'il est présent. mode strict.
var benjamin = { "name": "zuojj", "url" : "http://www.zuojj.com" }; var nameDeleted = delete benjamin.name; // Outputs: true console.log(nameDeleted); "use strict"; var benjamin_ = "zuojj"; //Outputs: Uncaught SyntaxError: Delete of an unqualified identifier in strict mode. delete benjamin_;
你可能不知道在什么情況下使用刪除運算符。答案是,只要你真的想從對象中刪除一個屬性。
有的時候,Javascript開發(fā)不是刪除一個屬性,而是把這個屬性值設(shè)置為null.像下面這樣:
var benjamin = { "name": "zuojj", "url" : "http://www.zuojj.com" }; benjamin.name = null;
雖然這有效地切斷從原來的值的屬性,但該屬性本身仍然存在的對象上,你可以看到如下:
// Outputs: Object { name: null, url: "http://www.zuojj.com" } console.log(benjamin);
同時,像in和for in 循環(huán)運算將不會報告null屬性的存在,如果你使用個對象,可能使用這些方法來檢查一個對象,你可能想確保你真正刪除任何不需要的屬性。
最后,你應(yīng)該記住,刪除并沒有破壞屬性的值,僅僅屬性本身,看下面的例子:
var name = "zuojj", benjamin = {}; benjamin.name = name; delete benjamin.name; //Outputs: "zuojj" console.log(name);
這里,name和benjamin.name映射到相同的值,真如你所看到的,刪除benjamin.name并不會影響name.
以上,就是我對delete運算符的概述,不妥之處,歡迎大家批評指正。

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Il existe trois fa?ons courantes d'initier des demandes HTTP dans Node.js: utilisez des modules intégrés, Axios et Node-Fetch. 1. Utilisez le module HTTP / HTTPS intégré sans dépendances, ce qui convient aux scénarios de base, mais nécessite un traitement manuel de la couture des données et de la surveillance des erreurs, tels que l'utilisation de https.get () pour obtenir des données ou envoyer des demandes de post via .write (); 2.AXIOS est une bibliothèque tierce basée sur la promesse. Il a une syntaxe concise et des fonctions puissantes, prend en charge l'async / attendre, la conversion JSON automatique, l'intercepteur, etc. Il est recommandé de simplifier les opérations de demande asynchrones; 3.Node-Fetch fournit un style similaire à la récupération du navigateur, basé sur la promesse et la syntaxe simple

Les types de données JavaScript sont divisés en types primitifs et types de référence. Les types primitifs incluent la cha?ne, le nombre, le booléen, le nul, un non défini et le symbole. Les valeurs sont immuables et les copies sont copiées lors de l'attribution des valeurs, de sorte qu'elles ne se affectent pas; Les types de référence tels que les objets, les tableaux et les fonctions stockent les adresses de mémoire, et les variables pointant vers le même objet s'afferchent mutuellement. Le typeof et l'instance de OFF peuvent être utilisés pour déterminer les types, mais prêtent attention aux problèmes historiques de typeofnull. Comprendre ces deux types de différences peut aider à écrire un code plus stable et fiable.

Bonjour, développeurs JavaScript! Bienvenue dans JavaScript News de cette semaine! Cette semaine, nous nous concentrerons sur: le différend de marque d'Oracle avec Deno, les nouveaux objets Time JavaScript sont pris en charge par les navigateurs, les mises à jour Google Chrome et certains outils de développeurs puissants. Commen?ons! Le différend de marque d'Oracle avec la tentative de Deno Oracle d'enregistrer une marque "JavaScript" a provoqué la controverse. Ryan Dahl, le créateur de Node.js et Deno, a déposé une pétition pour annuler la marque, et il pense que JavaScript est un niveau ouvert et ne devrait pas être utilisé par Oracle

La promesse est le mécanisme central pour gérer les opérations asynchrones en JavaScript. Comprendre les appels de cha?ne, la gestion des erreurs et les combinants est la clé pour ma?triser leurs applications. 1. L'appel de la cha?ne renvoie une nouvelle promesse à travers. Puis () pour réaliser la concaténation des processus asynchrones. Chaque .then () re?oit le résultat précédent et peut renvoyer une valeur ou une promesse; 2. La gestion des erreurs doit utiliser .catch () pour attraper des exceptions pour éviter les défaillances silencieuses, et peut renvoyer la valeur par défaut dans Catch pour continuer le processus; 3. Combinateurs tels que promesse.all () (réussi avec succès uniquement après tout succès), promesse.race () (le premier achèvement est retourné) et promesse.allsetTled () (en attente de toutes les achèvements)

Cacheapi est un outil fourni par le navigateur pour mettre en cache les demandes de réseau, qui est souvent utilisée en conjonction avec travailleur de service pour améliorer les performances du site Web et l'expérience hors ligne. 1. Il permet aux développeurs de stocker manuellement des ressources telles que des scripts, des feuilles de style, des photos, etc.; 2. Il peut faire correspondre les réponses du cache en fonction des demandes; 3. Il prend en charge la suppression des caches spécifiques ou la nettoyage du cache entier; 4. Il peut mettre en ?uvre des stratégies de priorité de cache ou de priorité de réseau grace à l'écoute des événements Fetch; 5. Il est souvent utilisé pour le support hors ligne, accélérez la vitesse d'accès répétée, préchargement des ressources clés et du contenu de mise à jour des antécédents; 6. Lorsque vous l'utilisez, vous devez faire attention au contr?le de la version du cache, aux restrictions de stockage et à la différence entre le mécanisme de mise en cache HTTP.

La boucle d'événement de JavaScript gère les opérations asynchrones en coordonnant les piles d'appels, les webapis et les files d'attente de taches. 1. La pile d'appels exécute du code synchrone, et lors de la rencontre de taches asynchrones, il est remis à WebAPI pour le traitement; 2. Une fois que le WebAPI a terminé la tache en arrière-plan, il met le rappel dans la file d'attente correspondante (macro tache ou micro tache); 3. La boucle d'événement vérifie si la pile d'appels est vide. S'il est vide, le rappel est retiré de la file d'attente et poussé dans la pile d'appels pour l'exécution; 4. Micro taches (comme Promise. puis) ??prendre la priorité sur les taches macro (telles que Settimeout); 5. Comprendre la boucle d'événements permet d'éviter de bloquer le thread principal et d'optimiser l'ordre d'exécution du code.

Les bulles d'événements se propagent de l'élément cible vers l'extérieur vers le n?ud d'ancêtre, tandis que la capture d'événements se propage de la couche externe vers l'intérieur vers l'élément cible. 1. événements Bubbles: Après avoir cliqué sur l'élément enfant, l'événement déclenche l'auditeur de l'élément parent vers le haut. Par exemple, après avoir cliqué sur le bouton, il sortira d'abord cliqué sur l'enfant, puis parent. 2. Capture d'événement: définissez le troisième paramètre sur true, afin que l'auditeur soit exécuté dans l'étape de capture, tels que le déclenchement de l'écouteur de capture de l'élément parent avant de cliquer sur le bouton. 3. Les utilisations pratiques incluent la gestion unifiée des événements d'éléments enfants, le prétraitement d'interception et l'optimisation des performances. 4. Le flux d'événements DOM est divisé en trois étapes: capture, cible et bulle, et l'écouteur par défaut est exécuté dans l'étape de la bulle.

Dans les tableaux JavaScript, en plus de la carte et du filtre, il existe d'autres méthodes puissantes et rarement utilisées. 1. La réduction peut non seulement résumer, mais également compter, se regrouper, aplatir les tableaux et construire de nouvelles structures; 2. Find et FindIndex sont utilisés pour trouver des éléments ou des index individuels; 3.Il et tout sont utilisés pour déterminer si les conditions existent ou que toutes les personnes se rencontrent; 4.Sort peut être trié mais changera le tableau d'origine; 5. Faites attention à la copie du tableau lorsque vous l'utilisez pour éviter les effets secondaires. Ces méthodes rendent le code plus concis et efficace.
