


Introduction aux attributs internes et à l'opérateur de suppression dans les compétences js_javascript
Avant d'expliquer Configurable
, regardons d'abord une question d'entretien :
a = 1; console.log( window.a ); // 1 console.log( delete window.a ); // true console.log( window.a ); // undefined var b = 2; console.log( window.b ); // 2 console.log( delete window.b ); // false console.log( window.b ); // 2
À partir de la question ci-dessus, nous pouvons voir deux différences : lorsqu'une variable n'est pas déclarée à l'aide de var, elle peut être supprimée à l'aide du mot-clé delete, et la valeur sera indéfinie lorsqu'elle sera à nouveau obtenue lorsqu'une variable est déclarée à l'aide de var, Il ne peut pas être supprimé à l'aide de delete et la valeur est toujours 2 une fois récupérée.
1. supprimer l'opérateur
Lorsque vous utilisez delete pour supprimer une variable ou un attribut, il renvoie vrai si la suppression réussit, sinon il renvoie faux. Comme dans l'exemple ci-dessus, si delete ne peut pas supprimer la variable a, il retournera false ; si delete parvient à supprimer la variable b, il retournera true.
En plus des deux situations ci-dessus, il existe diverses autres variables couramment utilisées qui peuvent être supprimées par suppression, et certaines qui ne peuvent pas être supprimées. Ne nous inquiétons pas de la raison pour laquelle delete produit un tel résultat. Ici, nous regardons uniquement sa valeur de retour :
.Supprimer un élément dans le tableau de suppression :
// 使用for~in是循环不到的,直接忽略到该元素 // 使用for()可以得到该元素,但是值是undefined var arr = [1, 2, 3, 4]; console.log( arr ); // [1, 2, 3, 4] console.log( delete arr[2] ); // true,删除成功 console.log( arr ); // [1, 2, undefined, 4]
Supprimer les variables de type fonction :
// chrome 不能删除;火狐可以删除 function func(){ } console.log( func ); console.log( delete func ); console.log( func );
Supprimez function.length, qui est le nombre de paramètres formels obtenus :
function func1(a, b){ } console.log( func1.length ); // 2 console.log( delete func1.length ); // true,删除成功 console.log( func1.length ); // 0
Supprimer les variables couramment utilisées :
console.log( delete NaN ); // false,删除失败 console.log( delete undefined );// false console.log( delete Infinity ); // false console.log( delete null ); // true,删除成功
Supprimez le prototype au lieu de supprimer les attributs sur le prototype :
function Person(){ } Person.prototype.name = "蚊子"; console.log( delete Person.prototype ); // false,无法删除 console.log( delete Object.prototype ); // false
Lors de la suppression de la longueur des tableaux et des chaînes :
var arr = [1, 2, 3, 4]; console.log( arr.length ); // 4 console.log( delete arr.length ); // false,删除失败 console.log( arr.length ); // 4 var str = 'abcdefg'; console.log( str.length ); // 7 console.log( delete str.length ); // false,删除失败 console.log( str.length ); // 7
Lors de la suppression d'attributs dans obj :
var obj = {name:'wenzi', age:25}; console.log( obj.name ); // wenzi console.log( delete obj.name ); // true,删除成功 console.log( obj.name ); // undefined console.log( obj ); // { age:25 }
Lors de la suppression d'attributs dans un objet d'instance, vous pouvez voir dans le résultat suivant que lorsque vous utilisez delete pour supprimer des attributs, seuls les attributs de l'objet d'instance lui-même sont supprimés et les attributs du prototype ne peuvent pas être supprimés même si. vous le supprimez à nouveau, il sera toujours supprimé. Il ne peut pas être supprimé ; si vous souhaitez supprimer les attributs ou les méthodes des attributs sur le prototype, vous pouvez uniquement les supprimer : delete Person.prototype.name
:
function Person(){ this.name = 'wenzi'; } Person.prototype.name = '蚊子'; var student = new Person(); console.log( student.name ); // wenzi console.log( delete student.name ); // true,删除成功 console.log( student.name ); // 蚊子 console.log( delete student.name ); // true console.log( student.name ); // 蚊子 console.log( delete Person.prototype.name );// true,删除成功 console.log( student.name ); // undefined
2. Propriétés internes de js
Dans l'exemple ci-dessus, certaines variables ou attributs peuvent être supprimés avec succès, tandis que d'autres ne peuvent pas être supprimés. Alors, qu'est-ce qui détermine si cette variable ou cet attribut peut être supprimé.
ECMA-262 5ème Édition définit les caractéristiques des propriétés des objets JS (utilisées dans les moteurs JS, non directement accessibles de l'extérieur). Il existe deux types de propriétés dans ECMAScript : les propriétés de données et les propriétés d'accesseur.
2.1 Attributs des données
Un attribut de données fait référence à un emplacement contenant une valeur de données auquel la valeur peut être lue ou écrite. Cet attribut a 4 propriétés qui décrivent son comportement :
- [[configurable]] : Indique s'il peut être supprimé et redéfini à l'aide de l'opérateur delete, ou s'il peut être modifié en tant qu'attribut accesseur. La valeur par défaut est vraie ;
- [[Enumberable]] : indique si l'attribut peut être renvoyé via une boucle for-in. Vrai par défaut ;
- [[Writable]] : Indique si la valeur de l'attribut peut être modifiée. Vrai par défaut ;
- [[Valeur]] : Contient la valeur des données de cet attribut. Cette valeur est lue/écrite. La valeur par défaut n'est pas définie ; par exemple, l'attribut name est défini dans l'objet d'instance Person ci-dessus et sa valeur est 'wenzi'. Les modifications de cette valeur se font de toute façon à cet emplacement .
Pour modifier les caractéristiques par défaut des propriétés d'un objet (la valeur par défaut est true), vous pouvez appeler la méthode Object.defineProperty(), qui reçoit trois paramètres : l'objet où se trouve la propriété, le nom de la propriété et un objet descripteur ( doit être : configurable, dénombrable, inscriptible et valeur, une ou plusieurs valeurs peuvent être définies).
est le suivant :
var person = {}; Object.defineProperty(person, 'name', { configurable: false, // 不可删除,且不能修改为访问器属性 writable: false, // 不可修改 value: 'wenzi' // name的值为wenzi }); console.log( person.name); // wenzi console.log( delete person.name ); // false,无法删除 person.name = 'lily'; console.log( person.name ); // wenzi
On peut voir que ni la suppression ni la réinitialisation de la valeur de person.name ne prennent effet. En effet, l'appel de la fonction définirProperty modifie les caractéristiques des propriétés de l'objet. Il convient de noter qu'une fois configurable défini sur false, définirProperty peut ; ne plus être utilisé pour le modifier à true (l'exécution signalera une erreur : Uncaught TypeError : Impossible de redéfinir la propriété : nom);
2.2 Propriétés des accesseurs
Il comprend principalement une paire de fonctions getter et setter. Lors de la lecture de l'attribut accesseur, le getter sera appelé pour renvoyer une valeur valide lorsque l'attribut accesseur est écrit, le setter sera appelé pour écrire la nouvelle valeur ; l'attribut a les 4 caractéristiques suivantes :
- [[Configurable]] : indique si l'attribut peut être supprimé et redéfini via l'opérateur de suppression ;
- [[Numberable]] : indique si cet attribut peut être trouvé via une boucle for-in
- [[Get]] : Appelé automatiquement lors de la lecture des propriétés, par défaut : non défini ;
- [[Set]] : Appelé automatiquement lors de l'écriture des attributs, par défaut : non défini ;
Les propriétés de l'accesseur ne peuvent pas être définies directement et doivent être définies à l'aide de finishProperty(), comme suit :
var person = { _age: 18 }; Object.defineProperty(person, 'isAdult', { Configurable : false, get: function () { if (this._age >= 18) { return true; } else { return false; } } }); console.log( person.isAdult ); // true
Cependant, il y a encore une chose qui nécessite une attention particulière. Lors de la définition des propriétés avec la méthode Object.defineProperty(), les propriétés de l'accesseur (set et get) et les propriétés des données (inscriptibles ou valeur) ne peuvent pas être déclarées en même temps. Cela signifie que si une propriété a un ensemble d'attributs inscriptible ou value, alors cette propriété ne peut pas déclarer get ou set, et vice versa.
Si définies comme suit, les propriétés d'accesseur et les propriétés de données existent en même temps :
var o = {}; Object.defineProperty(o, 'name', { value: 'wenzi', set: function(name) { myName = name; }, get: function() { return myName; } });
上面的代码看起来貌似是没有什么问题,但是真正执行时会报错,报错如下:
Uncaught TypeError: Invalid property. A property cannot both have accessors and be writable or have a value
对于数据属性,可以取得:configurable,enumberable,writable和value;
对于访问器属性,可以取得:configurable,enumberable,get和set。
由此我们可知:一个变量或属性是否可以被删除,是由其内部属性Configurable
进行控制的,若Configurable
为true,则该变量或属性可以被删除,否则不能被删除。
可是我们应该怎么获取这个Configurable
值呢,总不能用delete试试能不能删除吧。有办法滴!!
2.3 获取内部属性
ES5为我们提供了Object.getOwnPropertyDescriptor(object, property)
来获取内部属性。
如:
var person = {name:'wenzi'}; var desp = Object.getOwnPropertyDescriptor(person, 'name'); // person中的name属性 console.log( desp ); // {value: "wenzi", writable: true, enumerable: true, configurable: true}
通过Object.getOwnPropertyDescriptor(object, property)
我们能够获取到4个内部属性,configurable控制着变量或属性是否可被删除。这个例子中,person.name的configurable是true,则说明是可以被删除的:
console.log( person.name ); // wenzi console.log( delete person.name ); // true,删除成功 console.log( person.name ); // undefined
我们再回到最开始的那个面试题:
a = 1; var desp = Object.getOwnPropertyDescriptor(window, 'a'); console.log( desp.configurable ); // true,可以删除 var b = 2; var desp = Object.getOwnPropertyDescriptor(window, 'b'); console.log( desp.configurable ); // false,不能删除
跟我们使用delete操作删除变量时产生的结果是一样的。
3. 总结
别看一个简简单单的delete操作,里面其实包含了很多的原理!

Outils d'IA chauds

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.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

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 deux touches de suppression du clavier : la touche Suppr (supprimer) et la touche Retour arrière. La touche Retour arrière est également appelée touche Retour arrière. Cette touche peut supprimer le contenu du texte devant le curseur et la touche Supprimer peut supprimer les caractères, les fichiers et les objets sélectionnés. Chaque fois que vous appuyez sur la touche Suppr, un caractère à droite du curseur sera supprimé, et le caractère à droite du curseur se déplacera d'une image vers la gauche lorsqu'un ou plusieurs fichiers/dossiers sont sélectionnés, appuyez sur la touche Suppr ; touche pour supprimer rapidement ; dans certaines applications Sélectionnez un objet dans le programme et appuyez sur la touche Suppr pour supprimer rapidement l'objet sélectionné.

Les fonctions de la touche Suppr sont les suivantes : 1. Supprimer des caractères ; chaque fois que la touche Suppr est enfoncée, un caractère à droite du curseur sera supprimé et le caractère à droite du curseur se déplacera d'une image vers la gauche. 2. Supprimez les fichiers ; lorsqu'un ou plusieurs fichiers/dossiers sont sélectionnés, appuyez sur la touche Suppr pour les supprimer rapidement (déplacez-vous vers la corbeille pour la récupération). 3. Supprimez l'objet sélectionné ; sélectionnez un objet dans certaines applications et appuyez sur la touche Suppr pour supprimer rapidement l'objet sélectionné.

Ctrl+Alt+Suppr : mode "Mac" Ctrlaltdel est une combinaison de touches courante utilisée par les utilisateurs Windows pour ouvrir le Gestionnaire des tâches. Ils quittent généralement les applications indésirables du menu du gestionnaire pour libérer de l'espace sur leur ordinateur. La variante Mac Control+Alt+Delete vous permet d'ouvrir le menu Forcer à quitter. Si les utilisateurs de Mac souhaitent quitter le programme à l'origine du problème ou afficher les programmes ouverts, ils peuvent interagir avec le menu pour approfondir leurs recherches. Comment effectuer ControlAltDelete sur Mac ? Si vous avez des applications qui fonctionnent mal, vous devez utiliser cette combinaison de touches pour

Les fichiers supprimés par suppression peuvent être récupérés car lorsque les utilisateurs utilisent la suppression pour supprimer des fichiers, ces fichiers seront déplacés vers la corbeille et ne seront pas complètement supprimés. Méthode de récupération : 1. Ouvrez la « Corbeille », sélectionnez le fichier que vous souhaitez restaurer et cliquez sur « Restaurer cet élément » 2. Ouvrez la « Corbeille », sélectionnez le fichier que vous souhaitez restaurer et utilisez le raccourci d'annulation ; "ctrl+z".

À l'ère actuelle du développement Web, une gestion efficace et efficiente des tables est devenue très importante, en particulier lorsqu'il s'agit d'applications Web gourmandes en données. La possibilité d'ajouter, de modifier et de supprimer dynamiquement des lignes d'un tableau peut améliorer considérablement l'expérience utilisateur et rendre les applications plus interactives. Un moyen efficace d’y parvenir consiste à exploiter la puissance de jQuery. jQuery fournit de nombreuses fonctionnalités pour aider les développeurs à effectuer des opérations. Lignes de tableau Une ligne de tableau est une collection de données interdépendantes, représentées par des éléments en HTML. Il permet de regrouper des cellules (représentées par des éléments) dans un tableau. Chaque élément est utilisé pour définir une ligne dans le tableau, et pour les tableaux multi-attributs, il contient généralement un ou plusieurs éléments. Syntaxe$(sélecteur).append(co

L'utilisation de la plupart des commandes Linux utilisant le symbole « ! » peut varier selon les shells. Bien que les exemples que je fournis soient généralement utilisés dans les shells bash, certains autres shells Linux peuvent avoir des implémentations différentes ou ne pas prendre en charge certaines utilisations du symbole « ! » Plongeons dans les utilisations surprenantes et mystérieuses du symbole « ! » dans les commandes Linux. 1. Utilisez le numéro de commande pour exécuter une commande à partir de l'historique. Ce que vous ne savez peut-être pas, c'est que vous pouvez exécuter une commande à partir de l'historique des commandes (commandes déjà exécutées). Tout d’abord, recherchez le numéro de la commande en exécutant la commande « history ». linuxmi@linuxmi :~/www.linuxmi.

Les requêtes PUT et Delete sont utilisées dans le formulaire Form et ne prennent en charge que les méthodes get et post. Afin d'implémenter la méthode put, nous pouvons l'implémenter en suivant les trois étapes suivantes : 1) Configurer HiddenHttpMethodFilter dans SpringMVC 2) Créer un formulaire de publication sur le formulaire. page 3) Créez un élément d'entrée, nom ="_method", la valeur est la méthode de requête spécifiée. Obtenez la valeur de "_method" dans la classe HiddenHttpMethodFilter pour obtenir la nouvelle méthode de requête. La balise th est le modèle thymeleaf, ce qui signifie que uniquement lorsque l'employé

Utilisation de la suppression de la base de données : 1. Supprimer un seul enregistrement ; 2. Supprimer plusieurs enregistrements ; 3. Supprimer tous les enregistrements dans des conditions spécifiques ;
