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