J'utilise généralement le typeof
opérateur :
if (typeof obj.foo !== 'undefined') {
// your code here
}
Il retournera "undefined"
soit si la propriété n'existe pas ou si sa valeur est undefined
.
(Voir aussi : <a href="https://stackoverflow.com/questions/3420071/difference-between-undefined-and-not-being-defined-in-javascript/3420160#3420160">Différence entre <code>undefined</code> et ne pas être défini. </a>)
Il existe d'autres moyens de savoir si une propriété existe sur un objet, comme la fonction hasOwnProperty
méthode :
if (obj.hasOwnProperty('foo')) {
// your code here
}
Et le in
opérateur :
if ('foo' in obj) {
// your code here
}
La différence entre les deux derniers est que le hasOwnProperty
La méthode vérifiera si la propriété existe physiquement sur l'objet (la propriété n'est pas héritée).
Le site in
L'opérateur vérifiera toutes les propriétés accessibles dans la chaîne des prototypes, par exemple :
var obj = { foo: 'bar'};
obj.hasOwnProperty('foo'); // true
obj.hasOwnProperty('toString'); // false
'toString' in obj; // true
Comme vous pouvez le voir, hasOwnProperty
renvoie à false
et le in
L'opérateur retourne true
lors de la vérification de la toString
cette méthode est définie plus haut dans la chaîne des prototypes, car obj
hérite du formulaire Object.prototype
.
1 votes
J'ai écrit une fonction qui testera l'existence de la propriété d'un objet quelle que soit la profondeur de la requête : stackoverflow.com/a/12681101/1268003 En utilisant mon code, combiné à certaines connaissances partagées par @CMS dans ce fil de discussion, vous pouvez facilement écrire une fonction globale qui fonctionne très bien comme le isset de PHP.
4 votes
Si vous utilisez Underscore.js essayez
_.isUndefined(arr.foo)
0 votes
Le chaînage facultatif est probablement ce que la plupart des gens recherchent. stackoverflow.com/a/60845999/2100372
0 votes
TLDR ; Pour vérifier des variables qui pourraient ne pas avoir été déclarées, utilisez
typeof v !== 'undefined'
. Pour vérifier les variables dont on sait qu'elles ont été déclarées, utilisezv !== undefined
. Pour les objets, utilisezobj.property !== undefined
(que la propriété ait été déclarée ou non).