235 votes

if (key in object) ou if(object.hasOwnProperty(key)

Il est certain que ces conditions produisent le même résultat :

 if (key in object)

 if (object.hasOwnProperty(key))

Y a-t-il une raison de préférer une voie à une autre ?

238voto

Andre Meinhold Points 1289

Ils ne produiront pas le même résultat !

in retournera également true si key se trouve quelque part dans le chaîne des prototypes alors que Object.hasOwnProperty (comme son nom l'indique déjà), ne retournera que true si key est disponible sur cet objet directement (il "possède" la propriété).

35voto

xavier.seignard Points 3578

in vérifiera également les propriétés héritées, ce qui n'est pas le cas pour les éléments suivants hasOwnProperty

2voto

Jani Points 9200

L'autre forme (appelée dans) énumère les noms de propriétés (ou clés) d'un objet. A chaque itération, une autre chaîne de noms de propriétés de l'objet est assignée à la variable. Il est généralement nécessaire de tester object.hasOwnProperty(variable) afin de déterminer si le nom de la propriété est réellement un membre de l'objet ou a été trouvé à la place sur la chaîne des proto- type.

 for (myvar in obj) {
     if (obj.hasOwnProperty(myvar)) { ... } }

Emprunté de Javascript The Good Parts By Crackford

-6voto

AntoJs Points 5214

La première version est plus courte (notamment dans le code minifié où les variables sont renommées)

a in b

vs

b.hasOwnProperty(a)

De toute façon, comme l'a dit @AndreMeinhold, ils ne produisent pas toujours le même résultat.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X