Maison > interface Web > js tutoriel > Série avancée JavaScript - for in loop

Série avancée JavaScript - for in loop

黄舟
Libérer: 2017-02-08 09:31:14
original
1150 Les gens l'ont consulté

Utilisez hasOwnProperty pour filtrer

Résumé

Comme l'opérateur in, la boucle for in parcourt également toutes les propriétés de la chaîne de prototypes lors de la recherche de propriétés d'objet.

// 修改 Object.prototype
Object.prototype.bar = 1;

var foo = {moo: 2};
for(var i in foo) {
    console.log(i); // 输出两个属性:bar 和 moo
}
Copier après la connexion

Comme il est impossible de modifier le comportement de for en soi, il est nécessaire de filtrer les propriétés qui ne veulent pas apparaître dans le corps de la boucle. Cela peut être fait via la fonction hasOwnProperty sur. le prototype Object.prototype.

Remarque : la boucle for in ne traversera pas les propriétés dont l'énumérable est défini sur false, comme la propriété length d'un tableau ;

Utilisez hasOwnProperty pour filtrer

// foo 变量是上例中的
for(var i in foo) {
    if (foo.hasOwnProperty(i)) {
        console.log(i);
    }
}
Copier après la connexion

Cette version du code est la seule façon correcte de l'écrire. Puisque nous avons utilisé hasOwnProperty, seul moo est affiché cette fois. Si hasOwnProperty n'est pas utilisé, ce code peut être interrompu lorsque les prototypes d'objets natifs (tels que Object.prototype) sont étendus.

Une bibliothèque de classes largement utilisée, Prototype, étend les objets JavaScript natifs. Par conséquent, lorsque cette bibliothèque de classes est incluse dans la page, les boucles for in qui n'utilisent pas le filtrage hasOwnProperty poseront inévitablement des problèmes.


Remarque : Puisque for in parcourt toujours toute la chaîne de prototypes, les performances seront affectées si le niveau d'héritage d'un objet est trop profond.

Résumé

Il est recommandé de toujours utiliser hasOwnProperty, de ne faire aucune hypothèse sur l'environnement dans lequel le code s'exécute et de ne pas supposer si l'objet natif a été étendu.

Ce qui précède est le contenu de la série JavaScript avancée - for in loop. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal