Pourquoi la console google chromes est-elle retardée?

Duplication possible:
La console JavaScript de Chrome est-elle paresseuse à propos de l'évaluation des tableaux?

Fondamentalement, ce que je trouve est que google chrome a des problèmes avec ses outils de développement.

Prenez cet extrait par exemple:

console.log($(this).find(' .buttons .cancel')); $(this).find(' .buttons .cancel').remove(); 

Lorsque cet extrait est déclenché, s'il existe deux éléments qui correspondent aux sélecteurs google chrome outputs [, ] . Il s'agit essentiellement de trouver les éléments, mais il semble être plus lent à afficher les données qu'il ne devrait l'être.

Je veux pouvoir enregistrer les éléments que je supprime, mais dans l'état actuel, je dois l'exécuter sans la ligne .remove() . Et puis, après je sais que cela fonctionne, je peux l'exécuter à nouveau avec la fonction remove() .

Considérons le test suivant:

  • a={a:'a'} . Il renvoie un objet.
  • aa='b'
  • Développez le retour de la première commande. Il montre a: "b"

Ainsi, un objet est toujours affiché dans l'état où il se trouve lorsqu'il s'ouvre pour la première fois dans la console de développement Chrome. Pour (pseudo-) tableaux, ce qui compte, c'est l'état de l'objet lorsque la console y arrive. Cela pourrait être juste après le retour javascript normal (difficile à dire pourquoi. Des raisons de performance, peut-être).

Vous pouvez gérer cela en enregistrant toujours les éléments qui ne changent pas, tels que:

  • Valeurs primitives: console.log("hello")
  • Clones de nœuds DOM ou objets jQuery: console.log($(this).find(".buttons .cancel").clone())

Si l'enregistrement d'un objet immuable n'est pas une option, vous pouvez toujours vous connecter pendant le suivi du code: console.log(document); debugger; console.log(document); debugger;

Si vous passez un objet à la console.log() de Google Chrome qui n'est pas une valeur primitive comme une chaîne ou un numéro, elle ne produit pas immédiatement le contenu de cet objet. Probablement en raison d'une communication interprocessus, il y a un certain retard dans l'obtention réelle des données de l'objet et la sortie vers la console. Cela entraînera / peut causer des problèmes si vous modifiez immédiatement le même objet, car vous n'obtiendrez pas nécessairement la bonne chose dans la console.

Un work-around consiste à ne passer que les chaînes terminées à console.log() . Étant donné que les chaînes sont immuables, elles ne changeront jamais d'autre chose, de sorte que vous ne serez pas trompé par console.log() .

Dans votre cas, vous supprimez les éléments DOM dans la prochaine ligne de code. En raison de la rareté du temps de Chrome, cela supprime les éléments DOM avant que console.log() puisse effectivement voir ce qu'ils sont et les afficher. Vous pourriez faire quelque chose comme ceci à la place qui fait immédiatement la chaîne affichée et transmet cette chaîne à console.log() :

 console.log($(this).find(' .buttons .cancel').toString());