12
votes

Console Bizarre.log Comportement dans les outils de développeurs Chrome

Duplicaté possible:

Console JavaScript de Chrome paresseux des tableaux d'évaluation?

Ouvrez les outils de développeur chromé ouvert et tapez:

var a = []; console.log (a); a.push (1); console.log (a); < / Code>

Vous pouvez vous attendre à ce que cela sortirait quelque chose comme xxx

mais il sortira à la place xxx < p> Le comportement est le même pour

var a = []; console.log (a); a); A [0] = 1; console.log (a); < / p>

Quelqu'un peut-il expliquer ce comportement?

exécutant chrome sur OS X. Même comportement sur 32 bits Windows 7.

EDIT : le comportement est la même chose, que les déclarations soient sur la même ligne ou non. Je les ai simplement fournis sur une seule ligne pour le rendre facile à tester.

mettre xxx

dans un fichier puis en cours d'exécution donne le même comportement.

Edit x 2 Voir: http://jsfiddle.net/9n4a6/ si vous n'avez pas envie de faire un fichier à test.


4 commentaires

Je suppose que les appels vers console.log (a) la file d'attente de l'objet tableau pour l'impression, mais que la conversion de la matrice en chaîne ne se produit qu'après la fin de la ligne.


@CMS: n'a pas vu ça - merci


Vous êtes bienvenu @jamie :)


DUP possible de


5 Réponses :


4
votes

Essayez cela à la place:

var a = []; console.log(a.toString()); a.push(1); console.log(a.toString());


2 commentaires

Eh bien, `var a = []; console.log (a [0]); a [0] = 1; console.log (a [0]); ' fonctionne comme prévu, donc parfois console.log n'exécute pas toutes les déclarations avant l'impression.


@Arons, en fait, ce qui est attendu, même si l'impression est retardée ... elle envoie la valeur 1 à la console.log (), qui est ce qui est mis en cache alors affiché.




1
votes

Ouais, il fait cela sur des objets aussi ... et si vous modifiez la valeur plus tard (par exemple, plusieurs secondes plus tard), puis développez l'objet dans la console, la nouvelle valeur sera là. Bizarre, mais peut être utile dans un sens.

Si vous voulez la valeur actuelle, dites simplement "console.log (A.Tostring ());" ou similaire.


0 commentaires

2
votes

au moins avec des tableaux, vous pouvez cloner le tableau pour chaque appel de journal: xxx

pour les objets, je recommande JSON: xxx


0 commentaires

2
votes

Qu'est-ce qui est "enregistré" est l'objet "a" ... pas la représentation du texte brut de "A". L'affichage du journal est assez intelligent pour afficher un porte-lieu pour l'objet "A", qui est rempli / peuplé "plus tard" (semble être à la fin de l'invocation de l'événement). Si vous collez une déclaration d'alerte () Vous verrez les valeurs que vous attendez (les valeurs enregistrées obtiennent «rempli»): XXX

Cela ressemble à un bogue en chrome pour moi (un peu goofy de devoir mettre une instruction d'alerte pour voir les informations de journalisation correctes).

(Remarque Cette question montrée en haut d'une recherche Google pour "Console.log chrome montre uniquement les valeurs actuelles" alors je pensais que je 'D Ajouter ma réponse)


1 commentaires

Ce n'est pas un problème chrome-- C'est une question de webkit. Le même bogue se passera dans Safari.