Maison > interface Web > js tutoriel > Pourquoi JavaScript produit-il des résultats inattendus avec la concaténation de tableaux et d'objets ?

Pourquoi JavaScript produit-il des résultats inattendus avec la concaténation de tableaux et d'objets ?

DDD
Libérer: 2024-12-14 20:10:26
original
341 Les gens l'ont consulté

Why Does JavaScript Produce Unexpected Results with Array and Object Concatenation?

Les comportements originaux de JavaScript dévoilés

Dans l'intrigante conférence "Wat" à CodeMash 2012, plusieurs comportements JavaScript particuliers ont été mis en évidence. Explorons ces bizarreries et dévoilons les mécanismes sous-jacents impliqués.

[Array] [Array]

[] + []
Copier après la connexion

Résultat attendu : Une chaîne vide

Explication : En JavaScript, l'opérateur convertit les opérandes du tableau en primitives, ce qui donne un résultat vide chaînes pour les tableaux. Par la suite, il concatène ces chaînes, produisant une chaîne vide.

[Array] [Object]

[] + {}
Copier après la connexion

Résultat attendu : '[Object]'

Explication : Les deux opérandes sont à nouveau convertis en primitives. Les tableaux contiennent par défaut des chaînes vides, tandis que les objets génèrent « [object Object] ». L'opérateur les concatène, ce qui donne « [Object] ».

[Object] [Array]

{} + []
Copier après la connexion

Résultat attendu : [Object]

Explication : Dans ce cas, JavaScript traite {} comme une instruction de bloc vide, renvoyant une valeur vide. Ainsi, l'opérateur convertit [Array] en primitive (chaîne vide) et renvoie [Object] au lieu de 0, comme suggéré dans la vidéo.

[Object] [Object]

{} + {}
Copier après la connexion

Résultat attendu : Objet

Explication : Semblable à l'exemple précédent, les deux les opérandes sont convertis en chaînes vides. Cependant, puisque l'opérateur est utilisé dans un contexte d'argument de fonction, la règle d'analyse de bloc est remplacée et {} est interprété comme un littéral d'objet vide. La concaténation de deux objets vides donne 'Objet'.

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

Array(16).join("wat" - 1)
Copier après la connexion

Résultat attendu : NaN répété 16 fois

Explication : Les opérandes sont convertis en nombres. "wat" - 1 donne NaN (pas un nombre), qui est ensuite converti en chaîne ("NaN"). La méthode join() concatène la chaîne "NaN" 16 fois.

Dans la vidéo, lorsque "wat" 1 est utilisé à la place, l'opérateur d'addition convertit 1 en chaîne, ce qui fait que "wat1" est concaténé 16 fois.

Ces comportements complexes proviennent souvent des conversions de types implicites et de la sémantique des opérateurs définies dans la spécification du langage JavaScript. Comprendre ces subtilités aide les développeurs à naviguer dans les bizarreries et à écrire du code robuste dans ce langage polyvalent.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal