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
Libérer: 2024-11-03 14:45:03
original
376 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal