Pourquoi l'opérateur instanceof renvoie-t-il false pour certains littéraux ?
En JavaScript, l'opérateur instanceof vérifie si un objet est une instance d'une classe ou d'une hiérarchie de classes particulière. Cependant, il se comporte de manière inattendue lorsqu'il est appliqué à certains littéraux.
Les littéraux, tels que les chaînes, les nombres et les booléens, sont directement définis dans le code et non créés via des classes. Examinons les exemples suivants :
"foo" instanceof String //=> false "foo" instanceof Object //=> false true instanceof Boolean //=> false true instanceof Object //=> false 12.21 instanceof Number //=> false // Array and Object literals are exceptions [0,1] instanceof Array //=> true {0:1} instanceof Object //=> true
Comprendre la distinction
Primitives et objets :
Instanceof et Primitives
L'opérateur instanceof vérifie uniquement si un objet est une instance d'une classe ou ses descendants. Étant donné que les primitives ne sont pas créées via des classes, instanceof renverra toujours false pour les littéraux primitifs, même si la valeur du littéral correspond au type de classe.
Exceptions : tableau et objet
Les littéraux Tableau et Objet sont des exceptions à ce comportement. Ils ne sont pas construits à travers des classes mais sont toujours considérés comme des instances des classes Array et Object, respectivement. Il s'agit probablement d'une bizarrerie historique du langage.
Méthode de test alternative
Pour tester si une valeur est d'un certain type primitif, il faut plutôt utiliser l'opérateur typeof of instanceof:
typeof "foo" === "string" //=> true typeof 12.21 === "number" //=> true
Conclusion
Instanceof se comporte mal avec les littéraux primitifs car ce ne sont des instances d'aucune classe. Les littéraux Tableau et Objet sont des exceptions en raison d'une bizarrerie historique. Lors de la détermination du type d'une primitive, il est conseillé d'utiliser typeof au lieu de instanceof.
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!