
Il n’est pas rare de vouloir détecter des propriétés d’objets ayant une valeur de undefined
. Bien que cela semble simple à première vue, undefined
est une valeur plutôt difficile à vérifier.
Le plus souvent, les solutions s’orientent vers une comparaison directe et stricte avec undefined
ou l’utilisation de typeof
. Ces deux méthodes ont du mal à différencier les propriétés présentes ayant une valeur de undefined
et les propriétés inexistantes. Elles sont donc sujettes à des erreurs silencieuses, si vous vous trompez dans l’orthographe de la propriété.
const obj = { prop : undefined };
obj.prop === undefined;
typeof obj.prop === 'undefined';
obj.porp === undefined;
typeof obj.porp === 'undefined';
Pour pallier à ce problème, Object.prototype.hasOwnProperty()
peut être utilisée en plus de la méthode précédente pour vérifier si la propriété est effectivement présente sur l’objet. En outre, elle peut également être utilisée pour le contraire, de sorte que vous pouvez également détecter les propriétés inexistantes et les traiter en conséquence.
const hasUndefinedProperty = (obj, prop) =>
obj.hasOwnProperty(prop) && obj[prop] === undefined;
const obj = { prop: undefined };
hasUndefinedProperty(obj, 'prop');
hasUndefinedProperty(obj, 'porp');