Maison >interface Web >js tutoriel >Comment puis-je parcourir en toute sécurité les propriétés d'un objet en JavaScript à l'aide de « for...in » ?

Comment puis-je parcourir en toute sécurité les propriétés d'un objet en JavaScript à l'aide de « for...in » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-29 20:37:18232parcourir

How Can I Safely Iterate Over Object Properties in JavaScript Using `for...in`?

Itération des propriétés d'objet avec for...in

Lors de l'itération dans les propriétés d'objet à l'aide de la boucle for...in, la variable de boucle propt représente la clé de la propriété à laquelle on accède. Cependant, ce n'est pas une méthode ou une propriété intégrée pour les objets.

La boucle for...in récupère à la fois les propriétés de l'objet lui-même et les propriétés héritées de son prototype. Cela peut être problématique car les propriétés héritées peuvent ne pas être destinées à être incluses dans l'itération.

Utilisation de hasOwnProperty pour une itération précise

Pour contourner ce problème, vous pouvez ajouter une vérification hasOwnProperty dans la boucle for...in :

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

La méthode hasOwnProperty vérifie si une propriété est directement définie dans l'objet, non héritée de son prototype. En utilisant cette vérification, vous pouvez exclure les propriétés héritées de l'itération.

hasOwnProperty vs. Appel via l'objet

Vous pouvez également appeler hasOwnProperty via l'objet lui-même :

if (obj.hasOwnProperty(prop)) {
    // Do stuff
}

Cependant, cela peut échouer si l'objet a un champ sans rapport avec le même nom que hasOwnProperty, tel que :

var obj = { foo: 42, hasOwnProperty: 'lol' };
obj.hasOwnProperty('foo'); // TypeError

Pour éviter ce problème, il est plus sûr d'appeler hasOwnProperty via Object.prototype à la place :

Object.prototype.hasOwnProperty.call(obj, 'foo'); // True

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