Dans Safari sans add-ons, console.log
affichera l'objet au dernier état d'exécution, pas à l'état où console.log
a appelé console.log
.
Je dois cloner l'objet juste pour le sortir via console.log
pour obtenir l'état de l'objet sur cette ligne.
Exemple:
var test = {a: true} console.log(test); // {a: false} test.a = false; console.log(test); // {a: false}
Je pense que vous recherchez console.dir()
.
console.log()
ne fait pas ce que vous voulez parce qu'il imprime une référence à l'objet et, au moment où vous le faites apparaître, il est modifié. console.dir
imprime un répertoire des propriétés de l'objet au moment où vous l'appelez.
L'idée de JSON ci-dessous est bonne; Vous pourriez même continuer à analyser la chaîne JSON et à obtenir un objet navigable comme ce que .dir () vous donnerait:
console.log(JSON.parse(JSON.stringify(obj)));
Ce que je fais habituellement si je veux voir son état au moment où il a été enregistré, c'est que je le convertit simplement en une chaîne JSON.
console.log(JSON.stringify(a));
Vous pouvez créer un instantané d'un objet à un certain moment avec jQuery.extend
console.log($.extend({}, test));
Ce qui se passe réellement ici, jQuery crée un nouvel objet avec le contenu de l'objet de test
et enregistre-le (donc il ne changera pas).
Angular fournit une fonction de copy
qui peut être utilisée pour le même effet: angular.copy
console.log(angular.copy(test));
La réponse de @ evan semble mieux ici. Juste (ab) utilisez JSON.parse / stringify pour effectivement faire une copie de l'objet.
console.log(JSON.parse(JSON.stringify(test)));
Voici une fonction qui enveloppe console.log
mais qui fera une copie de tous les objets avant de les déconnecter.
J'ai écrit ceci en réponse à quelques fonctions similaires mais moins robustes dans les réponses. Il prend en charge plusieurs arguments et n'essaiera pas de copier les choses si elles ne sont pas des objets réguliers .
function consoleLogWithObjectCopy () { var args = [].slice.call(arguments); var argsWithObjectCopies = args.map(copyIfRegularObject) return console.log.apply(console, argsWithObjectCopies) } function copyIfRegularObject (o) { const isRegularObject = typeof o === 'object' && !(o instanceof RegExp) return isRegularObject ? copyObject(o) : o } function copyObject (o) { return JSON.parse(JSON.stringify(o)) }
Utilisation d'exemple : consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})
Cet > Object
dans la console, affiche non seulement l'état actuel. En fait, il est différé de lire l'objet et ses propriétés jusqu'à ce que vous l'étendiez.
Par exemple,
var test = {a: true} console.log(test); setTimeout(function () { test.a = false; console.log(test); }, 4000);
Ensuite, développez le premier appel, il sera correct, si vous le faites avant la deuxième console.log
retourne
En utilisant l'indice de Xeon06, vous pouvez analyser son JSON dans un objet, et voici la fonction de journal que j'utilise maintenant pour décharger mes objets:
function odump(o){ console.log($.parseJSON(JSON.stringify(o))); }
J'ai défini un utilitaire:
function MyLog(text) { console.log(JSON.stringify(text)); }
Et quand je veux me connecter à la console, je fais simplement:
MyLog("hello console!");
Il fonctionne très bien!
Vous voudrez peut-être enregistrer l'objet de manière lisible par l'homme:
console.log(JSON.stringify(myObject, null, 2));
Cela efface l'objet avec 2 espaces à chaque niveau.
Comment puis-je imprimer JSON avec JavaScript?
Je peux être abattu pour avoir suggéré cela, mais cela peut être franchi un peu plus loin. Nous pouvons étendre directement l'objet de console pour le rendre plus clair.
console.logObject = function(o) { (JSON.stringify(o)); }
Je ne sais pas si cela causera un certain type de collision de la bibliothèque / fusion nucléaire / déchirure dans le continuum spatio-temporelle. Mais ça fonctionne très bien dans mes tests qUnit. 🙂
Il suffit de rafraîchir la page après avoir ouvert la console ou d'ouvrir la console avant de soumettre la demande à la page ciblée ….
Il existe une option pour utiliser une bibliothèque de débogueurs.
Il suffit d'inclure le script dans votre page Web et de mettre des déclarations de journal.
<script src="debug.js"></script>
Enregistrement
var test = {a: true} log(test); // {a: true} test.a = false; log(test); // {a: false}
Imprimez tout l'objet entier sur la console.
console.dir(object);