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!