Maison  >  Article  >  interface Web  >  Pourquoi « instanceof » renvoie-t-il « false » pour les littéraux en JavaScript ?

Pourquoi « instanceof » renvoie-t-il « false » pour les littéraux en JavaScript ?

DDD
DDDoriginal
2024-11-03 22:39:31772parcourir

Why Does `instanceof` Return `false` for Literals in JavaScript?

Le mystère de l'instance de et des littéraux

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 :

  • Les littéraux, tels que les chaînes, les nombres et les booléens sont des primitifs. Ils existent indépendamment de toute classe ou instance.
  • Les objets, tels que les tableaux et les objets créés avec le nouveau mot-clé, sont des instances de classes.

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!

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