Maison >interface Web >js tutoriel >Pourquoi JavaScript produit-il des résultats inattendus dans ces étranges opérations arithmétiques ?
Comportements JavaScript déroutants dans la conférence « Wat »
La conférence « Wat » pour CodeMash 2012 a mis en évidence certains comportements particuliers en JavaScript, et c'est cela vaut la peine de les explorer pour comprendre ce qui se passe dans les coulisses.
[] []
L'opérateur d'addition ( ) utilisé avec les tableaux vides convertit les opérandes en primitives et les joint. Comme la valeur primitive par défaut des tableaux est une chaîne vide, le résultat de [] [] est une chaîne vide.
[] {}
Les objets en JavaScript ont un toString() méthode qui renvoie "[object Object]" lorsqu'elle est appelée. Ainsi, [] {} donne un objet, en particulier la chaîne "[object Object]".
{} []
Lorsqu'il est utilisé dans une instruction, {} est analysé comme un bloc vide et renvoie donc undéfini. L'opérateur contraint les opérandes non définis à des nombres, ce qui donne 0 pour {} [] (alors que le discours "Wat" mentionne qu'il devrait être NaN).
{} {}
Similaire à {} [], le premier {} est analysé comme un bloc vide, ce qui donne un résultat indéfini. Cependant, l'opérateur ne parvient pas à contraindre la chaîne "[object Object]" (la valeur toString() du deuxième {}) à un nombre, ce qui donne NaN.
Array(16).join ("wat" - 1)
ToNumber() convertit "wat" - 1 en NaN, car soustraire un nombre d'une chaîne entraîne un résultat non numérique valeur. ToPrimitive() convertit ensuite NaN en chaîne "NaN", qui est répétée 16 fois lors de la jonction des éléments du tableau.
Conclusion
Ces comportements apparemment bizarres proviennent des règles de conversion primitives de JavaScript et les méthodes spécifiques associées aux tableaux et aux objets. En comprenant ces mécanismes sous-jacents, vous pouvez éviter des résultats inattendus et exploiter toute la puissance de 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!