Maison > Article > interface Web > Pourquoi les chaînes de caractères, les booléens et les nombres littéraux échouent-ils au test « instanceof » ?
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 :
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!