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 ?
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 {}.
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>
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.
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.
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!