Comment afficher le contenu d'un objet JavaScript dans un format de chaîne comme lorsque nous avons alert
une variable?
De la même manière formatée, je veux afficher un objet.
javascript
serialization
javascript-objects
maxjackie
la source
la source
console.log("", yourObject1, yourObject2, yourObject3, etc...);
. Une version plus courte est à faireconsole.log(yourObject1, yourObject2, etc...);
.console.log('a string', aNumber, anObject)
Réponses:
Si vous souhaitez imprimer l'objet à des fins de débogage, utilisez le code:
Affichera:
Remarque: vous devez uniquement enregistrer l'objet. Par exemple, cela ne fonctionnera pas:
Remarque ' : Vous pouvez également utiliser une virgule dans la
log
méthode, puis la première ligne de la sortie sera la chaîne et ensuite l'objet sera rendu:la source
console.log(obj1, obj2)
fonctionne très bien, vous n'avez donc pas à appelerconsole.log()
chaque objet lors de la journalisation de plusieurs variables. N'oubliez pas également de supprimer tous ces appels en production, car cela briserait les navigateurs qui ne l'implémentent pas (comme Internet Explorer).console.log("id:"+obj);
ne sortira pas correctement car il sort une chaîne telle que vous la voyez là-bas, vous devez la spécifier comme ceci:console.log("id:"); console.log(obj);
console.log(JSON.stringify(obj))
ouconsole.dir(obj)
Utilisez une
JSON.stringify
méthode native . Fonctionne avec des objets imbriqués et tous les principaux navigateurs prennent en charge cette méthode.Lien vers la référence de l'API Mozilla et d'autres exemples.
Utilisez un remplaçant JSON.stringify personnalisé si vous rencontrez cette erreur Javascript
la source
console.log
ieconsole.log(JSON.stringify(obj,null, 4));
{}
pour un objet non vide. Assurez-vous donc de vérifier avecconsole.log(obj)
avant de penser que votre objet est vide lors dustrigify()
retour{}
.la source
console.dir(object)
:Notez que la
console.dir()
fonctionnalité n'est pas standard. Voir les documents Web MDNla source
console.dir
est que vous pouvez toujours développer et lire les valeurs dans votre console après que la variable a été récupérée. Ceci est décrit dans un autre article SO iciconsole.dir
est que lorsque vous enregistrez la console dans un fichier, toutes les propriétés sont dans le fichier comme prévu. Cela ne se produit pas uniquement avec console.log.essaye ça :
Cela imprimera la version stringify de l'objet. Ainsi, au lieu d'
[object]
une sortie, vous obtiendrez le contenu de l'objet.la source
typeerror: Converting circular structure to JSON
?Eh bien, Firefox (merci à @Bojangles pour des informations détaillées) a une
Object.toSource()
méthode qui imprime les objets en JSON etfunction(){}
.C'est suffisant pour la plupart des objectifs de débogage, je suppose.
la source
.toSource()
est en fait Firefox uniquement . Je pensais juste que je te ferais savoir.Si vous souhaitez utiliser alert, pour imprimer votre objet, vous pouvez le faire:
alert("myObject is " + myObject.toSource());
Il doit imprimer chaque propriété et sa valeur correspondante au format chaîne.
la source
Si vous souhaitez voir les données sous forme de tableau, vous pouvez utiliser
Le tableau peut être trié si vous cliquez sur la colonne du tableau.
Vous pouvez également sélectionner les colonnes à afficher:
Vous pouvez trouver plus d'informations sur console.table ici
la source
Dans NodeJS, vous pouvez imprimer un objet à l'aide de
util.inspect(obj)
. Assurez-vous d'indiquer la profondeur ou vous n'aurez qu'une impression peu profonde de l'objet.la source
Une fonction:
Usage:
Exemple:
http://jsfiddle.net/WilsonPage/6eqMn/
la source
Utilisez simplement
Exemple
Ou
De plus, les fonctions en javascript sont considérées comme des objets.
Comme note supplémentaire:
En fait, vous pouvez attribuer une nouvelle propriété comme celle-ci et y accéder console.log ou l'afficher en alerte
la source
Utilisez ceci:
la source
Comme il a été dit auparavant, la manière la plus simple et la plus simple que j'ai trouvée était
la source
navigator
.Pour imprimer l'objet complet avec Node.js avec des couleurs en bonus:
Les couleurs sont bien sûr facultatives, 'depth: null' imprimera l'objet complet.
Les options ne semblent pas être prises en charge dans les navigateurs.
Références:
https://developer.mozilla.org/en-US/docs/Web/API/Console/dir
https://nodejs.org/api/console.html#console_console_dir_obj_options
la source
NB: Dans ces exemples, yourObj définit l'objet que vous souhaitez examiner.
Tout d'abord, ma façon la moins préférée mais la plus utilisée d'afficher un objet:
C'est la façon de facto de montrer le contenu d'un objet
produira quelque chose comme:
Je pense que la meilleure solution est de regarder à travers les clés des objets, puis à travers les valeurs des objets si vous voulez vraiment voir ce que contient l'objet ...
Il produira quelque chose comme: (photo ci-dessus: les clés / valeurs stockées dans l'objet)
Il existe également cette nouvelle option si vous utilisez ECMAScript 2016 ou une version plus récente:
Cela produira une sortie soignée: La solution mentionnée dans une réponse précédente:
console.log(yourObj)
affiche trop de paramètres et n'est pas la manière la plus conviviale d'afficher les données que vous voulez . C'est pourquoi je recommande les clés de journalisation, puis les valeurs séparément.Ensuite:
Quelqu'un dans un commentaire précédent a suggéré celui-ci, mais cela n'a jamais fonctionné pour moi. Si cela fonctionne pour quelqu'un d'autre sur un autre navigateur ou quelque chose, alors bravo! Je mettrai toujours le code ici pour référence! Sortira quelque chose comme ça sur la console:
la source
console.table(yourObj)
travaillé pour moi sur Google Chrome version 77.0.3865.90 (version officielle) (64 bits). Merci d'avoir partagé!(Cela a été ajouté à ma bibliothèque sur GitHub )
Réinventer la roue ici! Aucune de ces solutions n'a fonctionné pour ma situation. J'ai donc rapidement trafiqué la réponse de Wilsonpage . Celui-ci n'est pas destiné à l'impression sur écran (via la console, le champ de texte ou autre). Cela fonctionne bien dans ces situations et fonctionne très bien comme l'OP l'a demandé
alert
. De nombreuses réponses ici ne traitent pas de l'utilisationalert
comme l'OP l'a demandé. Quoi qu'il en soit, il est cependant formaté pour le transport de données. Cette version semble renvoyer un résultat très similaire àtoSource()
. Je n'ai pas testé contreJSON.stringify
, mais je suppose que c'est à peu près la même chose. Cette version ressemble plus à un poly-fil afin que vous puissiez l'utiliser dans n'importe quel environnement. Le résultat de cette fonction est une déclaration d'objet Javascript valide.Je ne douterais pas si quelque chose comme ça était déjà sur SO quelque part, mais c'était juste plus court à faire que de passer un peu de temps à chercher les réponses passées. Et puisque cette question a été mon principal succès sur Google lorsque j'ai commencé à chercher à ce sujet; Je pensais que le mettre ici pourrait aider les autres.
Quoi qu'il en soit, le résultat de cette fonction sera une représentation sous forme de chaîne de votre objet, même si votre objet a des objets et des tableaux intégrés, et même si ces objets ou tableaux ont encore d'autres objets et tableaux intégrés. (Je vous ai entendu aimer boire? Alors, j'ai pimpé votre voiture avec une glacière. Et puis, j'ai pimpé votre glacière avec une glacière. Donc, votre glacière peut boire pendant que vous êtes cool.)
Les tableaux sont stockés avec
[]
au lieu de{}
et n'ont donc pas de paires clé / valeur, juste des valeurs. Comme des tableaux réguliers. Par conséquent, ils sont créés comme le font les tableaux.De plus, toutes les chaînes (y compris les noms de clés) sont citées, ce n'est pas nécessaire à moins que ces chaînes aient des caractères spéciaux (comme un espace ou une barre oblique). Mais, je n'avais pas envie de détecter cela juste pour supprimer des citations qui, sinon, fonctionneraient toujours bien.
Cette chaîne résultante peut ensuite être utilisée avec
eval
ou simplement la vider dans une manipulation de chaîne à travers. Ainsi, recréez à nouveau votre objet, à partir du texte.Faites-moi savoir si j'ai tout gâché, fonctionne bien dans mes tests. De plus, la seule façon dont je pouvais penser pour détecter le type
array
était de vérifier la présence delength
. Parce que Javascript stocke vraiment les tableaux en tant qu'objets, je ne peux pas vérifier le typearray
(il n'y en a pas!). Si quelqu'un d'autre connaît une meilleure façon, j'aimerais l'entendre. Parce que, si votre objet a également une propriété nommée,length
cette fonction le traitera par erreur comme un tableau.EDIT: Ajout d'une vérification pour les objets de valeur nulle. Merci Brock Adams
EDIT: Ci-dessous est la fonction fixe pour pouvoir imprimer des objets infiniment récursifs. Cela n'imprime pas la même chose qu'à
toSource
partir de FF cartoSource
imprimera une fois la récursion infinie, où as, cette fonction la tuera immédiatement. Cette fonction s'exécute plus lentement que celle ci-dessus, donc je l'ajoute ici au lieu de modifier la fonction ci-dessus, car elle n'est nécessaire que si vous prévoyez de passer des objets qui se lient à eux-mêmes, quelque part.Tester:
Résultat:
REMARQUE: Essayer d'imprimer
document.body
est un exemple terrible. D'une part, FF imprime simplement une chaîne d'objet vide lors de l'utilisationtoSource
. Et lorsque vous utilisez la fonction ci-dessus, FF se bloqueSecurityError: The operation is insecure.
. Et Chrome va planterUncaught RangeError: Maximum call stack size exceeded
. De toute évidence,document.body
n'était pas destiné à être converti en chaîne. Parce que c'est soit trop grand, soit contre la politique de sécurité pour accéder à certaines propriétés. Sauf si j'ai foiré quelque chose ici, dites-le!la source
ObjToSource(document.body)
, par exemple.ObjToSource(document.body)
cause de la récursion infinie. Mêmedocument.body.toSource()
dans FireFox retourne un objet vide.document.body
n'est toujours pas imprimable. Voir la note.document.body
était juste un raccourci pour signaler quelques gros problèmes. Vous avez maintenant corrigé le pire de ceux-ci et j'ai déjà voté. (Bien que, je crois qu'une approche différente pourrait gérerdocument.body
. La plupart des réponses ici ne seraient pas non plus contre.)Si vous souhaitez imprimer l'objet sur toute sa longueur, vous pouvez utiliser
Si vous souhaitez imprimer l'objet en le convertissant en chaîne,
la source
JSON.stringify
lorsque vous essayez de concaténer avec un objet chaîne. Si vous utilisezconsole.log(object)
, il devrait assez imprimer le contenu de l'objetVoici une façon de procéder:
la source
J'avais besoin d'un moyen d'imprimer récursivement l'objet, ce que la réponse de pagewil a fourni (merci!). Je l'ai mis à jour un peu pour inclure un moyen d'imprimer jusqu'à un certain niveau et d'ajouter un espacement afin qu'il soit correctement indenté en fonction du niveau actuel dans lequel nous nous trouvons afin qu'il soit plus lisible.
Usage:
la source
J'utilise toujours
console.log("object will be: ", obj, obj1)
. de cette façon, je n'ai pas besoin de faire le contournement avec stringify avec JSON. Toutes les propriétés de l'objet seront bien développées.la source
Une autre façon d'afficher des objets dans la console est d'utiliser
JSON.stringify
. Découvrez l'exemple ci-dessous:la source
Fonction Javascript
Objet d'impression
via print_r en Javascript
la source
où
object
est ton objetou vous pouvez l'utiliser dans les outils de développement Chrome, onglet "console":
console.log(object);
la source
console.log(Object.keys(object));
alors que je sais que n'imprime que les clés des propriétés, cela me suffit pour mes besoins;)Supposons un objet
obj = {0:'John', 1:'Foo', 2:'Bar'}
Imprimer le contenu de l'objet
Sortie console (Chrome DevTools):
J'espère que cela pourra aider!
la source
Je préfère utiliser
console.table
pour obtenir un format d'objet clair, alors imaginez que vous avez cet objet:Et vous verrez un tableau net et lisible comme celui-ci ci-dessous:
la source
Une petite fonction d'aide que j'utilise toujours dans mes projets pour un débogage simple et rapide via la console. Inspiration tirée de Laravel.
Usage
dd(123.55);
les sorties:la source
Vous pouvez également utiliser le concept littéral de modèle ES6 pour afficher le contenu d'un objet JavaScript dans un format de chaîne.
la source
J'ai utilisé la méthode d'impression de Pagewil, et cela a très bien fonctionné.
voici ma version légèrement étendue avec des indentations (bâclées) et des délimiteurs prop / ob distincts:
la source
Une autre modification du code de pagewils ... le sien n'imprime rien d'autre que des chaînes et laisse le nombre et les champs booléens vides et j'ai corrigé la faute de frappe sur le second typeof juste à l'intérieur de la fonction créée par megaboss.
la source
Voici la fonction.
Il peut montrer un objet en utilisant un retrait de tabulation avec lisibilité.
la source