Comportement de la console JavaScript de Chrome : évaluation paresseuse des objets
Le comportement de la console JavaScript de Chrome lors de l'évaluation d'objets a été observé comme potentiellement inattendu. Pour illustrer cela, considérons le code suivant :
var s = ["hi"]; console.log(s); s[0] = "bye"; console.log(s);
Dans Firefox, la console affiche :
[ "hi" ] [ "bye" ]
Cependant, dans la version bêta de Chrome 7.0.517.41, la sortie est :
[ "bye" ] [ "bye" ]
Évaluation inattendue Comportement
Ce comportement suggère que la console de Chrome peut être « paresseuse » lors de l'évaluation des objets. Lorsque la première instruction console.log est exécutée, la console fait référence à l'objet en mémoire. Toutes les modifications ultérieures apportées à l'objet, telles que le changement du premier élément de « salut » à « au revoir », ne sont pas reflétées dans la sortie de la première instruction console.log. Cela implique que la console n'évalue l'objet qu'au moment de la première instruction console.log et stocke l'instantané.
Explication du bug
Ce comportement est documenté dans le rapport de bug Webkit suivant : https://bugs.webkit.org/show_bug.cgi?id=35801 (maintenant corrigé). Le bug indique que la console de Chrome n'effectue pas d'évaluation paresseuse pour les objets auxquels on accède directement, ce qui entraîne le comportement observé.
Solution de contournement
Pour éviter ce comportement inattendu, un peut appeler toString sur l'objet avant de le transmettre à console.log. Cela oblige Chrome à créer une représentation de l'objet qui n'est pas modifiée par les modifications ultérieures, garantissant ainsi que la sortie de la console reflète l'état actuel de l'objet.
var s = ["hi"]; console.log(s.toString()); s[0] = "bye"; console.log(s.toString());
Sortie :
hi bye
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!