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) { ... }
