Javascript !instanceof If-sats
Det här är en riktigt grundläggande fråga, egentligen bara för att stilla min nyfikenhet, men finns det ett sätt att göra något sådant här:
if(obj !instanceof Array) {
//The object is not an instance of Array
} else {
//The object is an instance of Array
}
Nyckeln här är att kunna använda NOT ! framför instansen. Vanligtvis är sättet jag måste ställa in detta på så här:
if(obj instanceof Array) {
//Do nothing here
} else {
//The object is not an instance of Array
//Perform actions!
}
Och det är lite irriterande att behöva skapa ett else-uttryck när jag helt enkelt vill veta om objektet är av en viss typ.
Svar #1
Inneslut i parentes och negatera på utsidan.
if(!(obj instanceof Array)) {
//...
}
I det här fallet är ordningen av prioritet viktig. Se: Operatorprioritet.
Operatorn ! föregår operatorn instanceof.
Svar #2
if (!(obj instanceof Array)) {
// do something
}
Är det rätta sättet att kontrollera detta - som andra redan har svarat. De två andra taktikerna som har föreslagits kommer inte att fungera och bör förstås...
I fallet med !-operatorn utan parenteser.
if (!obj instanceof Array) {
// do something
}
I det här fallet är ordningen för prioritet viktig (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). !-operatorn har företräde framför instanceof-operatorn. Så !obj utvärderades först till false (det är ekvivalent med ! Boolean(obj)); sedan testar du om false instanceof Array, vilket uppenbarligen är negativt.
I fallet med !-operatorn före instanceof-operatorn.
if (obj !instanceof Array) {
// do something
}
Detta är ett syntaxfel. Operatorer som != är en enskild operator, till skillnad från ett NOT som appliceras på ett EQUALS. Det finns ingen sådan operator som !instanceof på samma sätt som det inte finns någon !< operator.
Svar #3
Som förklarat i de andra svaren fungerar negation inte eftersom:
ordningen av företräde är viktig
Men det är lätt att glömma de dubbla parenteserna, så du kan göra det till en vana att göra:
if(obj instanceof Array === false) {
//The object is not an instance of Array
}
eller
if(false === obj instanceof Array) {
//The object is not an instance of Array
}
Prova det här
