C'est une question vraiment basique juste pour satisfaire ma curiosité, mais y a-t-il un moyen de faire quelque chose comme ça:
if(obj !instanceof Array) {
//The object is not an instance of Array
} else {
//The object is an instance of Array
}
La clé ici de pouvoir utiliser le NOT! devant l'instance. Habituellement, la façon dont je dois configurer cela est comme ceci:
if(obj instanceof Array) {
//Do nothing here
} else {
//The object is not an instance of Array
//Perform actions!
}
Et c'est un peu ennuyeux d'avoir à créer une instruction else quand je veux simplement savoir si l'objet est d'un type spécifique.
javascript
instanceof
ryandlf
la source
la source
!! obj instanceof Array
renvoie faux (incorrect) tandis que!!(obj instanceof Array)
retourne vrai (correct)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.
à votre réponse?Est-ce la bonne façon de vérifier cela - car d'autres ont déjà répondu. Les deux autres tactiques qui ont été suggérées ne fonctionneront pas et doivent être comprises ...
Dans le cas de l'
!
opérateur sans parenthèses.Dans ce cas, l'ordre de priorité est important ( https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence ). L'
!
opérateur précède l'instanceof
opérateur. Donc,!obj
évalué enfalse
premier (c'est équivalent à! Boolean(obj)
); alors vous testez sifalse instanceof Array
, ce qui est évidemment négatif.Dans le cas de l'
!
opérateur avant l'instanceof
opérateur.Ceci est une erreur de syntaxe. Les opérateurs tels que
!=
sont un opérateur unique, par opposition à un NOT appliqué à un EQUALS. Il n'y a pas d'opérateur de!instanceof
la même manière qu'il n'y a pas d'!<
opérateur.la source
Il est facile d'oublier les parenthèses (crochets) pour pouvoir prendre l'habitude de faire:
ou
Essayez-le ici
la source