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

Relaterade artiklar