Czy w JavaScript istnieje operator „nie w”, który sprawdza, czy właściwość nie istnieje w obiekcie? Nie mogłem znaleźć nic na ten temat w Google ani w Stack Overflow. Oto mały fragment kodu, nad którym pracuję, w przypadku gdy potrzebuję tego rodzaju funkcji:
var tutorTimes = {};
$(checked).each(function(idx){
id = $(this).attr('class');
if(id in tutorTimes){}
else{
//Rest of my logic will go here
}
});
Jak widać, zawarłbym wszystko w else
oświadczeniu. Wydaje mi się niewłaściwe tworzenie instrukcji if
- else
tylko po to, aby użyć tej else
części.
var id = ...
w swojej funkcji.Odpowiedzi:
Po prostu zaneguj swój stan, a otrzymasz
else
logikę wewnątrzif
:źródło
( ! somekey in someobj )
let keyExists = (key, obj) => key in obj
let hasProperty
„wygląda” lepiejJak już powiedział Jordão, po prostu zaneguj to:
Uwaga: powyższy test, jeśli tutorTimes ma właściwość o nazwie określonej w id, w dowolnym miejscu łańcucha prototypów. Na przykład
"valueOf" in tutorTimes
zwraca wartość true, ponieważ jest zdefiniowana w Object.prototype .Jeśli chcesz sprawdzić, czy właściwość nie istnieje w bieżącym obiekcie, użyj hasOwnProperty:
Lub jeśli masz klucz, który maOwnPropery , możesz użyć tego:
źródło
if(!tutorTimes.hasOwnProperty('id')) ...
?id
to zmienna, która może mieć dowolną wartość,'id'
jest łańcuchem z dwiema literami i i d , więchasOwnProperty(id)
sprawdza, czy właściwość określona w zmiennej id istnieje, ihasOwnProperty('id')
sprawdza, czy istnieje właściwość o nazwie id.Osobiście uważam
łatwiejsze do odczytania niż
ale oba będą działać.
źródło
Dwie szybkie możliwości:
lub
źródło
'undefined' === typeof xxx
zamiast tego.undefined
nie jest słowem zastrzeżonym i jest w rzeczywistości zmienną globalną, którą można nadpisać (co prowadzi do trudnych do znalezienia błędów)'foo' in myObj)
myObj['foo']
może istnieć jako właściwość i po prostu zostać ustawiona naundefined
(tj. za pomocą instrukcjimyObj.foo = undefined
). Jeśli naprawdę chcesz zobaczyć, czy właściwość sama w sobie nie istnieje, potrzebujesz!('foo' in myObj)
notacji.myObj.foo === undefined
jest znacznie szybsze (aczkolwiek potencjalnie niebezpieczne): jsperf.com/not-in-vs-is-undefined .=== undefined
. Wiele rzeczy może się zepsuć, jeśli ludzie nadużywają języka programowania, robiąc takie rzeczy, jak na przykład nadpisywanieundefined
w JavaScript. Zobacz też: stackoverflow.com/questions/8783510/…