Finns det en "not in"-operator i JavaScript för att kontrollera objektets egenskaper?


Finns det någon form av "not in"-operator i JavaScript för att kontrollera om en egenskap inte finns i ett objekt? Jag kunde inte hitta något om detta på Google eller Stack Overflow. Här är ett litet kodstycke jag arbetar med där jag behöver denna typ av funktionalitet:

var tutorTimes = {};

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

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

Som du kan se, skulle jag lägga allt i else-satsen. Det verkar fel för mig att sätta upp en if-else-sats bara för att använda else-delen.

Svar #1

Det verkar fel för mig att skapa ett if/else-uttryck bara för att använda else-delen...

Bara negatera ditt villkor, och du får else-logiken inne i if:

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

Svar #2

Personligen tycker jag

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

lättare att läsa än

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

men båda kommer att fungera.

Svar #3

Som redan sagt av Jordão, bara förneka det:

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

Notera: Testet ovan kollar om tutorTimes har en egenskap med namnet som anges i id, var som helst i prototypkedjan. Till exempel returnerar "valueOf" in tutorTimes true eftersom det är definierat i Object.prototype.

Om du vill testa om en egenskap inte finns i det aktuella objektet, använd hasOwnProperty:

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

Eller om du kanske har en nyckel som är hasOwnPropery kan du använda detta:

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

Om din miljö stöder ECMA-292 från juli 2022 kan du använda det bekväma alternativet till Object.prototype.hasOwnProperty Object.hasOwn:

if (!Object.hasOwn(tutorTimes,id)) { ... }

Svar #4

Två snabba möjligheter:

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

eller

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

Relaterade artiklar