Maison >interface Web >js tutoriel >Pourquoi « instanceof » se comporte-t-il différemment avec les littéraux en JavaScript ?

Pourquoi « instanceof » se comporte-t-il différemment avec les littéraux en JavaScript ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 14:45:03396parcourir

Why Does `instanceof` Behave Differently with Literals in JavaScript?

Incohérences de instanceof avec les littéraux

L'opérateur instanceof de JavaScript, malgré son objectif de vérifier si un objet est une instance d'une classe, présente des comportement inattendu avec les littéraux. Cet article plonge dans ces incohérences et dévoile le raisonnement qui les sous-tend.

Litéraux primitifs vs littéraux objets

Les primitives, telles que les chaînes, les nombres et les booléens, existent dans une catégorie de type distincte par rapport aux objets créés dans JavaScript. Cette distinction est illustrée dans les exemples suivants :

<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>

Alors que color1 est une instance de String créée à partir d'un constructeur, color2 est une chaîne littérale primitive.

False Returns avec instanceof

De façon inattendue, instanceof renvoie false pour de nombreux littéraux :

<code class="js">"foo" instanceof String // false
true instanceof Boolean // false
12.21 instanceof Number // false</code>

Ces primitives ne sont pas considérées comme des instances de leurs objets wrapper respectifs.

Exceptions avec Tableaux et objets

Les littéraux de tableau et d'objet sont des exceptions à la règle :

<code class="js">[0,1] instanceof Array // true
{0:1} instanceof Object // true</code>

Ils sont traités comme des instances des fonctions constructeur correspondantes.

Raisons des incohérences

Les différentes instances de comportement sont intentionnelles. JavaScript considère les primitives comme des valeurs immuables plutôt que comme des objets. En tant que tels, ils n’héritent d’aucune classe. Les exceptions pour les littéraux de tableau et d'objet sont faites pour simplifier la manipulation des objets et maintenir la cohérence avec les fonctions du constructeur.

Conclusion

Les littéraux primitifs et les objets créés dans JavaScript diffèrent par leur comportement avec l’opérateur instanceof. Cette distinction peut être à la fois contre-intuitive et pratique, selon le cas d’utilisation spécifique. En comprenant ce comportement nuancé, les développeurs peuvent utiliser efficacement instanceof dans leur code JavaScript.

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