Maison >interface Web >js tutoriel >Pourquoi la console JavaScript de Chrome affiche-t-elle des résultats inattendus lors de l'évaluation d'objets ?

Pourquoi la console JavaScript de Chrome affiche-t-elle des résultats inattendus lors de l'évaluation d'objets ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-27 04:59:13646parcourir

Why Does Chrome's JavaScript Console Show Unexpected Results When Evaluating Objects?

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!

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