Maison >interface Web >js tutoriel >Pourquoi « instanceof » se comporte-t-il différemment pour les primitives en JavaScript ?

Pourquoi « instanceof » se comporte-t-il différemment pour les primitives en JavaScript ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 12:00:05418parcourir

Why Does `instanceof` Behave Differently for Primitives in JavaScript?

Instances et primitives en JavaScript : compréhension des anomalies d'instance

L'opérateur instanceof de JavaScript renvoie true si un objet hérite d'une classe particulière. Cependant, certains littéraux tels que les chaînes et les nombres semblent défier cette règle, renvoyant false par exemple lors de comparaisons. Pourquoi est-ce le cas ?

Primitives vs. Objets

La clé pour comprendre ces anomalies réside dans la distinction entre primitives et objets. Les primitives, qui incluent des chaînes, des nombres, des valeurs nulles, non définies et des booléens, ne sont pas créées à l'aide de constructeurs. À l'inverse, les objets sont créés à l'aide de constructeurs ou de littéraux d'objet, comme new String("foo") ou {}.

instanceof Behaviour for Primitives

Pour les primitives, l'opérateur instanceof renvoie false pour toutes les classes. En effet, les primitives ne sont des instances d’aucune classe et n’héritent d’aucun prototype. Par exemple :

<code class="js">"foo" instanceof String // false
123 instanceof Number // false</code>

Exceptions : RegExp et Arrays

Les littéraux RegExp, bien qu'ils soient primitifs, sont une exception à cette règle. Ils renvoient vrai pour l'instance de RegExp. De même, les littéraux de tableau renvoient vrai pour instanceof Array.

instanceof avec Null et Undefined

Null et undefined sont des primitives uniques qui ont un comportement spécial avec instanceof. Ils renvoient false pour toutes les classes, y compris Object. En effet, techniquement, ils ne sont pas des objets, mais ont plutôt leurs propres types de données uniques.

Consequences

Les incohérences dans les instances de comportement peuvent prêter à confusion et conduire à des événements inattendus. résultats. Pour éviter de tels problèmes, il est généralement recommandé d'utiliser des vérifications typeof au lieu de instanceof pour déterminer le type d'une variable. Par exemple :

<code class="js">var foo = "string";
typeof foo === "string" // true</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn