245 votes

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 procéder de la sorte

 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 gênant de devoir créer une autre instruction quand je veux simplement savoir si l'objet est d'un type spécifique.

449voto

Sergio Tulentsev Points 82783

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

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

86voto

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

Est la bonne façon de le vérifier - comme d'autres l'ont déjà répondu. Les deux autres tactiques qui ont été proposées ne seront pas de travail et doit être compris...

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

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

Dans ce cas, l'ordre de préséance est important (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). L' ! opérateur précède l' instanceof de l'opérateur. Donc, !obj évalué à l' false première (c'est équivalent à ! Boolean(obj)); alors vous êtes à tester si l' false instanceof Array, ce qui est évidemment négative.

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

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

C'est une erreur de syntaxe. Des opérateurs tels que != sont d'un seul opérateur, par opposition à l'un ne s'applique PAS à un ÉGAL. Il n'y a pas de tel opérateur !instanceof de la même manière qu'il n'y a pas d' !< de l'opérateur.

-3voto

riship89 Points 1803

"!" ne fonctionne que sur des entités booléennes.

 obj instanceof Array
 

est équivalent à

 Object.getPrototypeof(obj) === Array.prototype
 

résultat qui renvoie un objet booléen. Ensuite, vous pouvez utiliser "!" opérateur sur ce résultat.

Dans votre code,! Instanceof ne pointe vers rien. Donc, le programme devrait échouer.

Vous pouvez utiliser:

 ! obj instanceof Array  //returns either true or false
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X