web-dev-qa-db-fra.com

Javascript! Instanceof If Statement

C’est une question très fondamentale qui ne fait que satisfaire ma curiosité, mais existe-t-il un moyen de faire quelque chose comme ceci:

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

La clé ici étant capable d'utiliser le NOT! devant l'instance. Habituellement, la façon dont je dois configurer ceci est la suivante:

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

Et c'est un peu ennuyeux de devoir créer une autre instruction quand je veux simplement savoir si l'objet est d'un type spécifique.

164
ryandlf

Placez entre parenthèses et niez à l'extérieur.

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

Dans ce cas, l'ordre de priorité est important ( https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence ). Le ! l'opérateur précède l'opérateur instanceof.

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

Est-ce la bonne façon de vérifier cela - comme d'autres ont déjà répondu. Les deux autres tactiques suggérées ne fonctionneront pas et devraient être comprises ...

Dans le cas de l'opérateur ! Sans crochets.

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

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'opérateur instanceof. Donc, !obj A été évalué à false first (cela équivaut à ! Boolean(obj)); alors vous testez si false instanceof Array, ce qui est évidemment négatif.

Dans le cas de l'opérateur ! Avant l'opérateur instanceof.

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

C'est une erreur de syntaxe. Les opérateurs tels que != Sont un seul opérateur, par opposition à un NON appliqué à un EQUALS. Il n'y a pas d'opérateur tel que !instanceof De la même manière qu'il n'y a pas d'opérateur !<.

71
chrismichaelscott

Il est facile d’oublier les parenthèses (crochets) pour pouvoir prendre l’habitude de faire:

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

ou

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

Essayez-le ici

38
Wilt