La conférence "Wat" pour CodeMash 2012 a mis en lumière certains comportements déroutants en JavaScript. Ici, nous approfondissons les mécanismes sous-jacents et expliquons les résultats observés dans l'exemple JSFiddle.
[] + [] result: ""
Les chaînes vides résultant de la jonction des tableaux mettent en évidence que l'opérateur convertit les deux opérandes aux primitives, appelant toString() sur les tableaux. Pour les tableaux vides, cette conversion produit une chaîne vide.
[] + {} result: [Object]
Comme auparavant, la conversion du tableau vide en primitive nous donne une chaîne vide. Cependant, l'objet est contraint dans une chaîne à l'aide de sa méthode toString(), ce qui donne « [Object] ». Cette chaîne est concaténée avec la chaîne vide, produisant "[Object]."
{} + [] result: [Object]
Le {} ici est interprété comme un bloc vide, ce qui donne une primitive vide valeur. L'opérateur tente ensuite de convertir l'objet en chaîne via toString(), conduisant à "[Object]". Cependant, ce comportement est une anomalie, car la vidéo suggère que le résultat devrait être 0.
{} + {} result: [Object][Object]
Semblable au cas précédent, les objets sont contraints en chaînes. Cependant, comme il n’existe pas d’opérateur unaire, le résultat n’est pas converti en nombre. Au lieu de cela, la concaténation de "[Object]" et "[Object]" est renvoyée.
result: NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
Soustraction d'un nombre à partir d’une chaîne donne NaN. Lorsqu'elle est passée en argument à Array.join, la conversion en chaîne (via toString()) produit "NaN". La méthode join() du tableau concatène ensuite cette chaîne à plusieurs reprises, conduisant au résultat observé.
Ces comportements particuliers proviennent des règles spécifiques de conversion des valeurs en primitives et du comportement de l'opérateur en JavaScript. Bien que certains d'entre eux puissent sembler contre-intuitifs, comprendre les mécanismes sous-jacents permet aux développeurs de mieux anticiper et gérer ces bizarreries dans leur propre code.
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!