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
Libérer: 2024-12-27 04:59:13
original
639 Les gens l'ont consulté

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);
Copier après la connexion

Dans Firefox, la console affiche :

[ "hi" ]
[ "bye" ]
Copier après la connexion

Cependant, dans la version bêta de Chrome 7.0.517.41, la sortie est :

[ "bye" ]
[ "bye" ]
Copier après la connexion

É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());
Copier après la connexion

Sortie :

hi
bye
Copier après la connexion

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