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!