Maison >interface Web >js tutoriel >Pourquoi JavaScript produit-il des résultats inattendus lors de l'ajout de tableaux et d'objets ?

Pourquoi JavaScript produit-il des résultats inattendus lors de l'ajout de tableaux et d'objets ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-16 09:37:10630parcourir

Why Does JavaScript Produce Unexpected Results When Adding Arrays and Objects?

Comprendre le comportement bizarre des ajouts JavaScript

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.

Empty Array Empty Array

[] + []
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.

Objet tableau 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]."

Object Empty Array

{} + []
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.

Objet Objet

{} + {}
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.

Array(16).join("wat" - 1)

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

Conclusion

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!

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