Maison  >  Article  >  interface Web  >  Pourquoi les chaînes de caractères, les booléens et les nombres littéraux échouent-ils au test « instanceof » ?

Pourquoi les chaînes de caractères, les booléens et les nombres littéraux échouent-ils au test « instanceof » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 21:51:02546parcourir

Why Do String, Boolean, and Number Literals Fail the `instanceof` Test?

Instanceof Conundrum : Pourquoi certains littéraux ne correspondent pas

Bien qu'il soit fondamental pour JavaScript, l'opérateur instanceof peut présenter un comportement déroutant lorsqu'il est utilisé avec certains littéraux. Notamment, les littéraux chaîne, booléen et numérique sont tous évalués comme faux lorsqu'ils sont testés par rapport à leurs constructeurs respectifs.

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

true instanceof Boolean //=> false
true instanceof Object //=> false
false instanceof Boolean //=> false
false instanceof Object //=> false

12.21 instanceof Number //=> false
/foo/ instanceof RegExp //=> true</code>

Ce comportement est surprenant, car on pourrait s'attendre à ce que les littéraux soient des instances de leurs types correspondants. Cependant, la raison de leur incohérence réside dans la distinction entre les primitives et les objets.

Le primitivisme en jeu

Les primitives JavaScript, telles que les chaînes, les nombres et les booléens, sont types intégrés qui ne sont pas créés via des constructeurs d'objets. Au lieu de cela, ils sont fondamentalement différents des objets construits dans JavaScript.

<code class="js">var color1 = new String("green");
color1 instanceof String; // returns true
var color2 = "coral";
color2 instanceof String; // returns false (color2 is not a String object)</code>

Comme démontré ci-dessus, l'utilisation du constructeur String crée un objet String, qui sera évalué comme vrai lorsqu'il sera testé avec instanceof. Cependant, la chaîne primitive littérale « corail » n'hérite pas de ce comportement.

Méthodes alternatives de vérification de type

Le comportement déroutant d'instanceof avec les primitives a conduit à l'adoption de méthodes alternatives pour la vérification de type :

  • opérateur typeof : L'opérateur typeof renvoie le type primitif d'une variable, par exemple, typeof "foo" === "string".
  • Object.prototype.toString : Cette méthode peut également être utilisée pour la vérification de type, par exemple, Object.prototype.toString.call("foo") === "[object String ]".

En conclusion, le comportement d'instanceof avec les primitives est le résultat du système de types unique de JavaScript. Bien que cela puisse prêter à confusion, comprendre la distinction entre les primitives et les objets peut aider les développeurs à naviguer efficacement dans ces nuances.

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