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
