javascript - for - jquery selectionner element




Comment déterminer si un objet a une propriété donnée dans JavaScript (6)

Comment puis-je déterminer si un objet x a une propriété définie y , quelle que soit la valeur de xy ?

J'utilise actuellement

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

mais cela semble un peu maladroit. Y a-t-il un meilleur moyen?


L'objet a la propriété:

Si vous testez des propriétés qui se trouvent sur l'objet lui-même (ne faisant pas partie de sa chaîne prototype), vous pouvez utiliser .hasOwnProperty() :

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

L'objet ou son prototype a une propriété:

Vous pouvez utiliser l'opérateur in pour tester les propriétés héritées également.

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

Pourquoi pas simplement:

if (typeof myObject.myProperty == "undefined") alert("myProperty is not defined!");

Ou si vous attendez un type spécifique:

if (typeof myObject.myProperty != "string") alert("myProperty has wrong type or does not exist!");

Si vous voulez savoir si l'objet contient physiquement @gnarf's réponse de la propriété @gnarf's utilisant hasOwnProperty , faites le travail.

Si vous voulez savoir si la propriété existe, que ce soit sur l'objet lui-même ou dans la chaîne du prototype, vous pouvez utiliser l' opérateur in .

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

Par exemple.:

var obj = {};

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

Underscore.js ou Lodash

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

:)


Voici comment j'ai écrit ce composant réutilisable object-hasOwnProperty pour vérifier si un objet a la propriété dsproperty, en retournant un booléen:

function hasOwnProperty(obj: {}, prop: string|number): boolean {
  return Object.prototype.hasOwnProperty.call(obj, prop);
};

Il ne monte pas la chaîne du prototype, et voici des exemples pertinents:

hasOwnProperty({foo: 'bar'}, 'foo') // => true
hasOwnProperty({foo: 'bar'}, 'bar') // => false

Également ajouté 3 tests pour montrer comment il gère différents cas d'utilisation (valeur, n'a pas de valeur, est nul)


Vous pouvez réduire cela un peu comme ceci:

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




object