To jest naprawdę podstawowe pytanie, aby zaspokoić moją ciekawość, ale czy istnieje sposób na zrobienie czegoś takiego:
if(obj !instanceof Array) {
//The object is not an instance of Array
} else {
//The object is an instance of Array
}
Kluczem tutaj jest możliwość korzystania z NOT! przed instancją. Zazwyczaj muszę to skonfigurować w następujący sposób:
if(obj instanceof Array) {
//Do nothing here
} else {
//The object is not an instance of Array
//Perform actions!
}
I trochę denerwujące jest tworzenie instrukcji else, gdy chcę po prostu wiedzieć, czy obiekt jest określonego typu.
javascript
instanceof
ryandlf
źródło
źródło
!! obj instanceof Array
zwraca false (niepoprawny), a!!(obj instanceof Array)
zwraca true (poprawny)In this case, the order of precedence is important (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). The ! operator precedes the instanceof operator.
do swojej odpowiedzi?To właściwy sposób, aby to sprawdzić - jak już inni odpowiedzieli. Pozostałe dwie taktyki, które zostały zasugerowane, nie będą działać i należy je zrozumieć ...
W przypadku
!
operatora bez wsporników.W takim przypadku kolejność pierwszeństwa jest ważna ( https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence ).
!
Operatora poprzedzainstanceof
operatora. Tak więc,!obj
oceniane jakofalse
pierwsze (jest to równoważne z! Boolean(obj)
); następnie testujesz, czyfalse instanceof Array
, co jest oczywiście negatywne.W przypadku
!
operatora przedinstanceof
operatorem.To jest błąd składniowy. Operatory takie jak
!=
pojedynczy operator, w przeciwieństwie do NOT stosowanej do EQUALS. Nie ma takiego operatora, jak!instanceof
w przypadku braku!<
operatora.źródło
Łatwo zapomnieć o nawiasach (nawiasach kwadratowych), dzięki czemu możesz nawykć:
lub
Wypróbuj tutaj
źródło