L'itération sur les propriétés nécessite cet élément supplémentaire hasOwnProperty
vérifier :
for (var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
// do stuff
}
}
C'est nécessaire parce que le prototype d'un objet contient des propriétés supplémentaires pour l'objet qui font techniquement partie de l'objet. Ces propriétés supplémentaires sont héritées de la classe de l'objet de base, mais sont toujours des propriétés de la classe obj
.
hasOwnProperty
vérifie simplement s'il s'agit d'une propriété spécifique à cette classe, et non d'une propriété héritée de la classe de base.
Il est également possible d'appeler hasOwnProperty
à travers l'objet lui-même :
if (obj.hasOwnProperty(prop)) {
// do stuff
}
Mais cela échouera si l'objet possède un champ sans rapport avec le même nom :
var obj = { foo: 42, hasOwnProperty: 'lol' };
obj.hasOwnProperty('foo'); // TypeError: hasOwnProperty is not a function
C'est pourquoi il est plus sûr d'appeler par le biais de Object.prototype
à la place :
var obj = { foo: 42, hasOwnProperty: 'lol' };
Object.prototype.hasOwnProperty.call(obj, 'foo'); // true
14 votes
if (typeof(obj[propt]) === 'object') {
/* Do it again */}
13 votes
Je suis vraiment désolé pour cette question. Je sais ce qu'est une boucle, je n'arrivais pas à me faire à l'idée de "boucler à travers les propriétés d'un objet", ce qui, je pense, est clair maintenant. Aussi, ils m'ont recommandé "JavaScript Step by Step 2nd Edition - Steve Suehring à l'école.
273 votes
C'est une bonne question pour les débutants. J'ajouterais que j'ai 15 ans d'expérience professionnelle avec d'autres langages et que j'avais besoin de cette réponse. J'ajouterais 2000 si je pouvais.
1 votes
@ItayMoav-Malimovka En analysant le langage de la question, en tant que linguiste, il est clair qu'il voit que c'est une boucle, il veut savoir que l'opérateur IN passe les propriétés de l'objet comme "propt".
2 votes
Duplicata possible de Comment énumérer les propriétés d'un objet javascript ?
71 votes
C'est fou, mais cela fait des années que je viens sur cette page tous les deux mois pour réapprendre la syntaxe sur la façon de faire ceci. Je ne prends pas la peine de me rappeler comment faire... Je me rappelle juste que cette page est toujours là sur SO.
0 votes
Cette réponse montre deux alternatives utilisant underscore et lodash. Utile si elles sont déjà disponibles pour vous : stackoverflow.com/a/19023387/1483977
17 votes
C'est la page la plus étrange que j'ai vue sur StackOverflow. Si vous lisez attentivement la question, une seule réponse tente même de répondre à ce qui est réellement demandé, et elle a un score de -6. La réponse la plus élevée, qui a été acceptée, non seulement ne répond pas, mais est tout simplement fausse.