Maison >interface Web >js tutoriel >Pourquoi l'itération « for...in » inclut-elle parfois des propriétés inattendues et comment puis-je éviter cela ?

Pourquoi l'itération « for...in » inclut-elle parfois des propriétés inattendues et comment puis-je éviter cela ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-24 12:49:11299parcourir

Why Does `for...in` Iteration Sometimes Include Unexpected Properties, and How Can I Avoid This?

Itération des propriétés d'un objet : dévoiler les mystères de Propt

Lors de l'itération des propriétés d'un objet à l'aide de la boucle for...in, une variable connue sous le nom de propt apparaît. Cette variable représente chaque clé de propriété de l'objet. Mais pourquoi cela fonctionne-t-il de cette façon ?

La raison est que Object.prototype contient des propriétés supplémentaires héritées par tous les objets. Ces propriétés ne font pas partie de l'objet spécifique mais sont partagées par tous les objets. Par exemple, toString et hasOwnProperty sont deux exemples courants.

Pour éviter de parcourir par inadvertance ces propriétés héritées, il est crucial d'inclure une vérification supplémentaire : Object.prototype.hasOwnProperty.call(obj, prop). Cette vérification garantit que la propriété sur laquelle l'itération appartient spécifiquement à l'objet et n'a pas été héritée de la classe de base.

Pour plus de clarté, voici un exemple de code mis à jour :

for (var prop in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, prop)) {
        // do stuff
    }
}

De plus, bien qu'il soit possible d'utiliser obj.hasOwnProperty(prop) à la place, cette méthode peut mal fonctionner si l'objet a un champ sans rapport avec le même nom. En tant que tel, appeler hasOwnProperty via Object.prototype est plus fiable.

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:
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