Table des matières
Attributs d'instance et attributs de prototype
La valeur de cet attribut (valable uniquement pour les descripteurs d'attributs de données)
Quand< Lorsque la propriété 🎜> est définie sur
) de cette propriété. S'il n'y a pas d'accesseur, la valeur est
) de cette propriété. S'il n'y a pas de setter, la valeur est
indique si les attributs de l'objet peuvent être supprimés, et d'autres attributs à l'exception de l'attribut
définit si les propriétés de l'objet peuvent être énumérées dans des boucles
常用的遍历方法
for...in...遍历
for...of遍历
Object.keys遍历
Object.getOwnPropertyNames()遍历
结语
Maison interface Web js tutoriel Explication détaillée des problèmes de traversée dans js

Explication détaillée des problèmes de traversée dans js

Apr 10, 2018 pm 04:55 PM
javascript 遍历 问题

Le contenu partagé avec vous dans cet article concerne l'explication détaillée des problèmes de traversée dans js. Il a une certaine valeur de référence. Les amis dans le besoin peuvent se référer aux

Attributs d'instance et attributs de prototype

  • Il existe deux types de propriétés d'objets en JavaScript : les

    propriétés de données et les propriétés d'accesseur .

  • Selon le contexte spécifique, les attributs peuvent être divisés en :

    Attributs de prototype et Attributs d'instance .

  • Les attributs du prototype sont des attributs définis dans le prototype de l'objet , prototype

  • Attributs d'instance D'une part, ils proviennent de la fonction construite, et ensuite de nouveaux attributs sont ajoutés après l'instanciation du constructeur.

énumération js

Parcourir les propriétés d'un objet en JavaScript n'est pas très simple, principalement pour deux raisons :

  • Les objets en JavaScript sont généralement dans une chaîne de prototypes et ils héritent de certaines propriétés d'un ou plusieurs prototypes de niveau supérieur

  • Les attributs en JavaScript ont non seulement des valeurs, mais ils ont également d'autres caractéristiques en plus valeur. L'une des caractéristiques qui affectent le parcours d'attribut est

    (un descripteur d'attribut). Si la valeur est Enumerable, alors l'attribut est énumérable, sinon true

Descripteur d'attribut <.>
  • a principalement deux formes :

    et 属性描述符. 数据描述符存取描述符

  • Utilisez les méthodes
  • et

    pour obtenir le Object.getOwnPropertyDescriptor de l'objet. Object.getOwnPropertyDescriptors属性描述符

valeur
var obj = {
  name: &#39;10&#39;,
  _age: 25,
  get age(){
    return this._age;
  },
  set age(age){
    if(age<1){
      throw new Error(&#39;Age must be more than 0&#39;);
    }else{
      this._age = age;
    }
  }
};

var des = Object.getOwnPropertyDescriptors(obj);
console.log(des);
/**
 * des: {
 *  name: {
 *    configurable: true,
 *    enumerable: true,
 *    value: "10",
 *    writable: true,
 *    __proto__: Object
 *  },
 *  _age: {
 *    configurable: true,
 *    enumerable: true,
 *    value: 25,
 *    writable: true,
 *    __proto__: Object
 *  },
 *  age: {
 *    configurable: true,
 *    enumerable: true,
 *    get: f age(),
 *    set: f age(age),
 *    __proto__: Object
 *  },
 *  __proto__: Object
 * }
*/
Copier après la connexion
La valeur de cet attribut (valable uniquement pour les descripteurs d'attributs de données)

inscriptible

Quand< Lorsque la propriété 🎜> est définie sur
, la propriété est dite "non accessible en écriture". Il ne peut pas être réaffecté.

writablegetfalse

Obtient la fonction accesseur (
) de cette propriété. S'il n'y a pas d'accesseur, la valeur est
. (Uniquement valable pour les descriptions de propriété contenant des accesseurs ou des setters)

gettersetundefined

Obtient la fonction setter (
) de cette propriété. S'il n'y a pas de setter, la valeur est
. (Valable uniquement pour les descriptions de propriétés contenant des accesseurs ou des setters) L'attribut

setterconfigurableundefined

indique si les attributs de l'objet peuvent être supprimés, et d'autres attributs à l'exception de l'attribut
s'il peut être modifié.

configurableenumerablewritable

définit si les propriétés de l'objet peuvent être énumérées dans des boucles
et

. enumerablefor...inObject.keys()

name et _age ont quatre descripteurs d'attribut
    ,
  • ,

    et &#39;configurable&#39;, appelés collectivement &#39;enumerable&#39;&#39;value&#39;&#39;writable&#39;数据描述符

    l'âge a quatre descripteurs d'attributs
  • ,
  • ,

    et &#39;configurable&#39;, collectivement appelés &#39;enumerable&#39;&#39;get&#39;&#39;set&#39;存取描述符

    对象的属性描述符,可以通过Object.definePropertyObject.defineProperties来修改(configurabletrue的条件下)

    常用的遍历方法

    for...in...遍历

    • 遍历自身及原型链上所有可枚举的属性

    • 使用 for...in 循环遍历对象属性时返回的属性会因为各个 浏览器不同 导致对象属性遍历的顺序有可能不是当初构建时的顺序。

    Chrome Opera 的 JavaScript 解析引擎遵循的是新版 ECMA-262 第五版规范。因此,使用 for-in 语句遍历对象属性时遍历书序并非属性构建顺序。而 IE6 IE7 IE8 Firefox Safari 的 JavaScript 解析引擎遵循的是较老的 ECMA-262 第三版规范,属性遍历顺序由属性构建的顺序决定。
    for-in 语句无法保证遍历顺序,应尽量避免编写依赖对象属性顺序的代码。如果想顺序遍历一组数据,请使用数组并使用 for 语句遍历。
    var Animal = function({name=&#39;none&#39;, age=3, weight=80}={}){
      this.name = name;
      this.age = age;
      this.weight = weight;
    }
    
    Animal.prototype = {
      color: &#39;red&#39;
    }
    
    var dog = new Animal()
    
    // 将weight属性设置为 不可枚举
    Object.defineProperty(dog, &#39;weight&#39;, {
      enumerable: false
    })
    
    for(let i in dog){
      console.log(n);
    }
    
    //原型链上的color同样被遍历出来了,并且由于weight属性被设置成了enumerable:false,所以不可被遍历
    //name 
    //age 
    //color
    Copier après la connexion

    for...of遍历

    一个数据结构只要部署了Symbol.iterator属性,就被视为具有 iterator 接口,就可以用for...of循环遍历它的成员。也就是说,for...of循环内部调用的是数据结构的Symbol.iterator方法。

    for...of循环可以使用的范围包括数组、SetMap 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、Generator 对象,以及字符串。

    如果不太清楚iterator,请去看看阮一峰大神的这篇文章,里面关于for...of以及iterator都讲的非常详细!

    其实for...offor...in都是迭代一些东西,它们之间的主要区别在于它们的迭代方式。

    • for...in语句以原始插入顺序迭代对象的可枚举属性。

    • for...of 语句遍历可迭代对象定义要迭代的数据。

    请仔细看以下实例,理解其中的区别

    Object.prototype.objCustom = function() {}; 
    Array.prototype.arrCustom = function() {};
    
    let iterable = [3, 5, 7];
    iterable.foo = &#39;hello&#39;;
    
    for (let i in iterable) {
      console.log(i); //  0, 1, 2, "foo", "arrCustom", "objCustom"
    }
    
    for (let i in iterable) {
      if (iterable.hasOwnProperty(i)) {
        console.log(i); //  0, 1, 2, "foo"
      }
    }
    
    for (let i of iterable) {
      console.log(i); //  3, 5, 7
    }
    Copier après la connexion
    Object.prototype.objCustom = function() {};
    Array.prototype.arrCustom = function() {}; 
    
    let iterable = [3, 5, 7]; 
    iterable.foo = &#39;hello&#39;;
    Copier après la connexion

    在这段代码里面,由于继承和原型链,对象iterable继承属性objCustomarrCustom

    for (let i in iterable) {
      console.log(i); // 0, 1, 2, "foo", "arrCustom", "objCustom" 
    }
    Copier après la connexion

    在这段代码里面,此循环仅以原始插入顺序记录iterable 对象的可枚举属性。它不记录数组元素3, 5, 7hello,因为这些不是枚举属性。但是它记录了数组索引以及arrCustomobjCustom(为何记录arrCustomobjCustom在本文for...in里面有讲过)。

    for (let i in iterable) {
      if (iterable.hasOwnProperty(i)) {
        console.log(i); //  0, 1, 2, "foo"
      }
    }
    Copier après la connexion

    hasOwnProperty()用来检查找到的枚举属性是不是对象自己的(即是不是继承的)

    for (let i of iterable) {
      console.log(i); //  3, 5, 7 
    }
    Copier après la connexion

    该循环迭代并记录iterable作为可迭代对象定义的迭代值,这些是数组元素 3, 5, 7,而不是任何对象的属性。

    Object.keys遍历

    Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。

    Object.getOwnPropertyNames()遍历

    Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组,此方法不会获取原型链上的属性。

    var Animal = function({name=&#39;&#39;, age=1, weight=70}={}){
      this.name = name;
      this.age = age;
      this.weight = weight;
    }
    
    Animal.prototype = {
      type: &#39;Animal&#39;
    }
    
    var dog = new Animal()
    
    // 将height属性设置为 不可枚举
    Object.defineProperty(dog, &#39;weight&#39;, {
      enumerable: false
    })
    
    var keys = Object.getOwnPropertyNames(dog);
    console.log(keys)
    // [&#39;name&#39;, &#39;age&#39;, &#39;weight&#39;]
    Copier après la connexion

    结语

    这篇文章希望能让大家更加理解js中的遍历,写的不好多多见谅并指出!

    相关推荐:

    实例详解AngularJS遍历获取数组元素

    JS遍历对象属性的方法示例

    JS遍历页面所有对象属性及实现方法

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Java comment parcourir un dossier et obtenir tous les noms de fichiers Java comment parcourir un dossier et obtenir tous les noms de fichiers Mar 29, 2024 pm 01:24 PM

Java est un langage de programmation populaire doté de puissantes capacités de gestion de fichiers. En Java, parcourir un dossier et obtenir tous les noms de fichiers est une opération courante, qui peut nous aider à localiser et traiter rapidement les fichiers dans un répertoire spécifique. Cet article explique comment implémenter une méthode permettant de parcourir un dossier et d'obtenir tous les noms de fichiers en Java, et fournit des exemples de code spécifiques. 1. Utilisez la méthode récursive pour parcourir le dossier. Nous pouvons utiliser la méthode récursive pour parcourir le dossier. La méthode récursive est un moyen de s'appeler, qui peut parcourir efficacement le dossier.

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Comment résoudre le problème selon lequel jQuery ne peut pas obtenir la valeur de l'élément de formulaire Comment résoudre le problème selon lequel jQuery ne peut pas obtenir la valeur de l'élément de formulaire Feb 19, 2024 pm 02:01 PM

Pour résoudre le problème selon lequel jQuery.val() ne peut pas être utilisé, des exemples de code spécifiques sont requis. Pour les développeurs front-end, l'utilisation de jQuery est l'une des opérations courantes. Parmi eux, utiliser la méthode .val() pour obtenir ou définir la valeur d'un élément de formulaire est une opération très courante. Cependant, dans certains cas précis, le problème de ne pas pouvoir utiliser la méthode .val() peut se poser. Cet article présentera quelques situations et solutions courantes, et fournira des exemples de code spécifiques. Description du problème Lorsque vous utilisez jQuery pour développer des pages frontales, vous rencontrerez parfois

Comment résoudre le problème du menu Démarrer qui ne peut pas être utilisé après l'installation de Win11 Comment résoudre le problème du menu Démarrer qui ne peut pas être utilisé après l'installation de Win11 Jan 06, 2024 pm 05:14 PM

De nombreux utilisateurs ont essayé de mettre à jour le système Win11, mais ont constaté que le menu Démarrer ne peut pas être utilisé après la mise à jour. Cela peut être dû à un problème avec la dernière mise à jour. Nous pouvons attendre que Microsoft corrige ou désinstalle ces mises à jour pour résoudre le problème. problème. Examinons-le ensemble. Que faire si le menu Démarrer ne peut pas être utilisé après l'installation de Win11. Méthode 1 : 1. Ouvrez d'abord le panneau de configuration dans Win11. 2. Cliquez ensuite sur le bouton "Désinstaller un programme" sous le programme. 3. Entrez dans l'interface de désinstallation et recherchez « Afficher les mises à jour installées » dans le coin supérieur gauche. 4. Après avoir entré, vous pouvez afficher l'heure de mise à jour dans les informations de mise à jour et désinstaller toutes les mises à jour récentes. Méthode 2 : 1. De plus, nous pouvons également télécharger directement le système win11 sans mises à jour. 2. C'est un produit sans le plus

Quelles sont les questions de l'examen Rulong 8 Wine Master ? Quelles sont les questions de l'examen Rulong 8 Wine Master ? Feb 02, 2024 am 10:18 AM

Quelles sont les questions impliquées dans l’examen Yulong 8 Wine Master ? Quelle est la réponse correspondante ? Comment réussir l’examen rapidement ? De nombreuses questions doivent trouver une réponse dans les activités de l'examen Master of Wine, et nous pouvons nous référer aux réponses pour les résoudre. Ces questions impliquent toutes la connaissance du vin. Si vous avez besoin d’une référence, jetons un œil à l’analyse détaillée des réponses aux questions de l’examen Yakuza 8 Wine Master ! Explication détaillée des réponses aux questions de l'examen Rulong 8 Wine Master 1. Questions sur le « vin ». Il s'agit d'une liqueur distillée produite par une distillerie créée par la famille royale. Elle est brassée à partir du sucre de canne à sucre cultivé en grande quantité à Hawaï. Quel est le nom de ce vin ? Réponse : Rhum 2. Question sur le « vin ». La photo montre une boisson à base de ginseng sec et de vermouth sec. Il se caractérise par l'ajout d'olives et est connu sous le nom de « cockney ».

Comment obtenir facilement le code d'état HTTP en JavaScript Comment obtenir facilement le code d'état HTTP en JavaScript Jan 05, 2024 pm 01:37 PM

Introduction à la méthode d'obtention du code d'état HTTP en JavaScript : Dans le développement front-end, nous devons souvent gérer l'interaction avec l'interface back-end, et le code d'état HTTP en est une partie très importante. Comprendre et obtenir les codes d'état HTTP nous aide à mieux gérer les données renvoyées par l'interface. Cet article explique comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournit des exemples de code spécifiques. 1. Qu'est-ce que le code d'état HTTP ? Le code d'état HTTP signifie que lorsque le navigateur lance une requête au serveur, le service

Foire aux questions sur le nouveau test révolutionnaire de Wuhuami : le 28 février, nous attendons avec impatience votre arrivée ! Foire aux questions sur le nouveau test révolutionnaire de Wuhuami : le 28 février, nous attendons avec impatience votre arrivée ! Feb 26, 2024 pm 05:22 PM

Wuhua Mixin a confirmé qu'elle effectuerait un test de rupture le 28 février. Cette fois, nous résoudrons principalement les problèmes courants du test de rupture, notamment si vous avez participé à des tests précédents, êtes-vous éligible cette fois, le début et la fin du test et le temps de pré-téléchargement ? Jetons un coup d'œil aux plates-formes d'appareils prises en charge et aux autres contenus. Foire aux questions sur le nouveau test révolutionnaire de Wuhuami : le 28 février, nous attendons avec impatience votre arrivée ! 1. Quelle est la nature du « test de rupture » ? Ce test est un test limité de facturation et de suppression de fichiers pour Android. Après le test, les données de jeu de ce test seront supprimées. 2. Avez-vous déjà participé au « Test d'ouverture » ou au « Test d'entrée » ? Avez-vous les qualifications pour participer au « Test de rupture » cette fois-ci ? Si vous avez participé au « Test d'ouverture » ou au « Test d'entrée », veuillez scanner le code QR ci-dessous pour accéder à " Aux joueurs ayant participé à la bêta fermée

Comparaison approfondie de Java Iterator et Iterable : analyse des avantages et des inconvénients Comparaison approfondie de Java Iterator et Iterable : analyse des avantages et des inconvénients Feb 19, 2024 pm 04:20 PM

Différences conceptuelles : Itérateur : Iterator est une interface qui représente un itérateur qui obtient les valeurs d'une collection. Il fournit des méthodes telles que MoveNext(), Current() et Reset(), vous permettant de parcourir les éléments de la collection et d'opérer sur l'élément actuel. Iterable : Iterable est également une interface, représentant un objet itérable. Il fournit la méthode Iterator(), qui renvoie un objet Iterator pour faciliter la traversée des éléments de la collection. Utilisation : Iterator : Pour utiliser Iterator, vous devez d'abord obtenir un objet Iterator, puis appeler la méthode MoveNext() pour passer au suivant.

See all articles