349 votes

Déterminer si un objet javascript a une propriété donnée

Si je veux tester l 'objet x a une propriété définie y indépendamment de la valeur de x.y at - il un meilleur moyen que le

 if ( typeof(x.y) != 'undefined' ) ...
 

?

647voto

gnarf Points 49213

Objet a la propriété:

Si vous essai pour les propriétés sur l'objet lui-même (et non une partie de sa chaîne de prototype), vous pouvez utiliser .hasOwnProperty():

if (x.hasOwnProperty('y')) { 
  // ......
}

Objet ou de son prototype a une propriété:

Vous pouvez utiliser l' in opérateur de test pour des propriétés héritées.

if ('y' in x) {
  // ......
}

85voto

CMS Points 315406

Si vous voulez savoir si l'objet physiquement contient la propriété @gnarf de la réponse à l'aide de hasOwnProperty vont faire le travail.

Si vous avez envie de savoir si la propriété n'existe nulle part, que ce soit sur l'objet lui-même ou dans le prototype de la chaîne, vous pouvez utiliser l' in de l'opérateur.

if ('prop' in obj) {
  // ...
}

Ex.:

var obj = {};

'toString' in obj == true; // inherited from Object.prototype
obj.hasOwnProperty('toString') == false; // doesn't contains it physically

17voto

nackjicholson Points 859

Underscore.js

 if (_.has(x, "y")) ...
 

:)

12voto

darkporter Points 7552

Vous pouvez réduire cela un peu comme ceci:

 if ( x.y !== undefined ) ...
 

6voto

fsb Points 2741

Une caractéristique de mon code d'origine

 if ( typeof(x.y) != 'undefined' ) ...
 

cela peut être utile dans certaines situations, c'est qu'il est sûr d'utiliser si x existe ou non. Avec l'une ou l'autre des méthodes de la réponse de gnarf, il faut d'abord tester x s'il y a un doute s'il existe.

Alors peut-être que les trois méthodes ont leur place dans un sac de trucs.

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