Javascript !instanceof If-setning


Dette er virkelig et veldig enkelt spørsmål, egentlig bare for å tilfredsstille min nysgjerrighet, men er det en måte å gjøre noe sånt på:

if(obj !instanceof Array) {
    //The object is not an instance of Array
} else {
    //The object is an instance of Array
}

Nøkkelen her er å kunne bruke IKKE ! foran instansen. Vanligvis er måten jeg må sette dette opp på slik:

if(obj instanceof Array) {
    //Do nothing here
} else {
    //The object is not an instance of Array
    //Perform actions!
}

Og det er litt irriterende å måtte lage en else-setning når jeg bare vil vite om objektet er av en spesifikk type.

Svar #1

Sett i parentes og neger på utsiden.

if(!(obj instanceof Array)) {
    //...
}

I dette tilfellet er rekkefølgen på prioritet viktig. Se: Operatorprioritet.

Operatoren ! kommer før operatoren instanceof.

Svar #2

if (!(obj instanceof Array)) {
    // do something
}

Er den riktige måten å sjekke dette på - som andre allerede har svart. De to andre taktikkene som har blitt foreslått vil ikke fungere og bør forstås...

I tilfelle !-operatoren uten parenteser.

if (!obj instanceof Array) {
    // do something
}

I dette tilfellet er rekkefølgen av presedens viktig (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). !-operatoren har høyere presedens enn instanceof-operatoren. Så !obj blir evaluert til false først (det tilsvarer ! Boolean(obj)); deretter tester du om false instanceof Array, som åpenbart er negativt.

I tilfelle av !-operatoren foran instanceof-operatoren.

if (obj !instanceof Array) {
    // do something
}

Dette er en syntaksfeil. Operatorer som != er en enkelt operator, i motsetning til en NOT brukt på en EQUALS. Det finnes ingen slik operator som !instanceof på samme måte som det ikke finnes en !< operator.

Svar #3

Som forklart i de andre svarene fungerer ikke negasjon fordi:

«rekkefølgen av betydning er viktig»

Men det er lett å glemme de doble parentesene, så du kan gjøre det til en vane å gjøre:

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
}

Prøv det her

Relaterte artikler