web-dev-qa-db-fra.com

Existe-t-il un opérateur "pas dans" en JavaScript pour vérifier les propriétés de l'objet?

Existe-t-il une sorte d'opérateur "pas dans" en JavaScript pour vérifier si une propriété n'existe pas dans un objet? Je n'ai rien trouvé à ce sujet autour de Google ou de Stack Overflow. Voici un petit extrait de code sur lequel je travaille où j'ai besoin de ce type de fonctionnalité:

var tutorTimes = {};

$(checked).each(function(idx){
  id = $(this).attr('class');

  if(id in tutorTimes){}
  else{
    //Rest of my logic will go here
  }
});

Comme vous pouvez le constater, je mettrais tout dans la déclaration else. Il ne me semble pas correct de définir une instruction ifelse simplement pour utiliser la partie else.

147
Aaron

Il me semble erroné de configurer une déclaration if/else juste pour utiliser la portion else ...

Annulez simplement votre condition et vous obtiendrez la logique else à l'intérieur de la if:

if (!(id in tutorTimes)) { ... }
282
Jordão

Comme déjà dit par Jordão, nie-le:

if (!(id in tutorTimes)) { ... }

Remarque: Le test ci-dessus si tutorTimes a une propriété avec le nom spécifié dans id, n'importe où dans la chaîne de prototypes. Par exemple, "valueOf" in tutorTimes renvoie true car il est défini dans Object.prototype .

Si vous voulez vérifier si une propriété n'existe pas dans l'objet actuel, utilisez hasOwnProperty:

if (!tutorTimes.hasOwnProperty(id)) { ... }

Ou si vous avez une clé qui est hasOwnPropery , vous pouvez utiliser ceci:

if (!Object.prototype.hasOwnProperty.call(tutorTimes,id)) { ... }
29
some

Deux possibilités rapides:

if(!('foo' in myObj)) { ... }

ou

if(myObj['foo'] === undefined) { ... }
13
reedlauber

Personnellement je trouve

if (id in tutorTimes === false) { ... }

plus facile à lire que

if (!(id in tutorTimes)) { ... }

mais les deux vont travailler.

3
Forage