Objets et Console.log : une bizarrerie dévoilée
Lorsque vous travaillez avec des objets et console.log, vous pouvez rencontrer un comportement particulier. Dévoilons ce mystère en analysant cet extrait de code :
foo = [{id: 1},{id: 2},{id: 3},{id: 4}, {id: 5}, ]; console.log('foo1', foo, foo.length); foo.splice(2, 1); console.log('foo2', foo, foo.length);
Dans Chrome, cela produit le résultat inattendu :
foo1 [Object, Object, Object, Object, Object] 5 0: Object 1: Object 2: Object 3: Object length: 4 __proto__: Array[0] 5 (index):23 foo2 [Object, Object, Object, Object] 4 0: Object 1: Object 2: Object 3: Object length: 4 __proto__: Array[0]
L'examen asynchrone
La clé pour comprendre ce comportement réside dans la nature asynchrone de l'examen des objets via console.log. Bien que la console reçoive une référence à l'objet de manière synchrone, elle n'affiche pas ses propriétés tant que vous ne l'avez pas développé manuellement.
La surprise de la variable d'instance
Lorsque vous développez un objet une fois modifié, vous voyez les valeurs mises à jour au lieu de l'état d'origine. Cela se produit de manière asynchrone, conduisant à une sortie apparemment illogique.
Techniques de débogage
Pour éviter cette incohérence, envisagez ces techniques de débogage :
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!