Comment puis-je déterminer si un objet x
a une propriété définie y
, quelle que soit la valeur de x.y
?
J'utilise actuellement
if (typeof(x.y) !== 'undefined')
mais cela semble un peu maladroit. Y a-t-il une meilleure façon?
javascript
object
royhowie
la source
la source
Object.prototype.hasOwnProperty.call(x, 'y')
, de sorte que la propriété nommée "hasOwnProperty" n'entre pas en conflit avec le processus d'inspection;){}.hasOwnProperty.call(x, 'y')
.Si vous voulez savoir si l'objet contient physiquement la réponse de la propriété @ gnarf en utilisant
hasOwnProperty
fera le travail.Si vous voulez savoir si la propriété existe n'importe où, soit sur l'objet lui-même, soit dans la chaîne du prototype, vous pouvez utiliser l'
in
opérateur .Par exemple.:
la source
Underscore.js ou Lodash
:)
la source
Object.prototype.hasOwnProperty.call(x, "y")
. Pour les tableaux , je pense que vous voudrez peut - êtreArray.prototype.indexOf
,_.indexOf
ou_.contains
Vous pouvez réduire cela un peu comme ceci:
la source
x = {y:undefined}
Une caractéristique de mon code d'origine
ce qui peut être utile dans certaines situations, c'est qu'il est sûr d'utiliser qu'il
x
existe ou non. Avec l'une ou l'autre des méthodes de la réponse de gnarf, il faut d'abord testerx
s'il existe un doute quant à son existence.Alors peut-être que les trois méthodes ont leur place dans leur sac de trucs.
la source
(x && x.hasOwnProperty('y'))
ou(x && 'y' in x)
ReferenceError
plutôt que la chaîne «non défini»Étant donné que la question concernait la lourdeur de la vérification des propriétés, et une utilisation régulière pour cela étant la validation des objets d'options d'argument de fonction, j'ai pensé mentionner un moyen court sans bibliothèque de tester l'existence de plusieurs propriétés. Avertissement: il nécessite ECMAScript 5 (mais IMO toute personne utilisant encore IE8 mérite un site Web cassé).
la source
Pourquoi pas simplement:
Ou si vous attendez un type spécifique:
la source
x.hasOwnProperty('y')
?