451 votes

Imprimer le contenu d'un objet JavaScript ?

Typiquement, si nous utilisons simplement alert(object); il apparaîtra comme [object Object] . Comment imprimer tous les paramètres de contenu d'un objet en JavaScript ?

762voto

Igor Jerosimić Points 4686

Cela vous donnera une très belle sortie avec un objet JSON indenté utilisant JSON.stringify :

alert(JSON.stringify(YOUR_OBJECT_HERE, null, 4));

Le deuxième argument ( replacer ) modifie le contenu de la chaîne avant de la renvoyer.

Le troisième argument ( space ) spécifie le nombre d'espaces à utiliser comme espace blanc pour la lisibilité.

JSON.stringify documentation aquí .

38 votes

+1 pour le support multiplateforme. Normalisé dans ECMAScript 5ème édition, avec un support dans Firefox 3.6, Chrome (ver ?), Safari 4, et IE8. FYI : Le paramètre 4 est le nombre d'espaces pour chaque niveau d'indentation. Il peut également s'agir d'une chaîne de caractères, par exemple " \t ". Le paramètre null est un substitut pour une fonction de filtrage, si vous voulez limiter ce qui est affiché. Voir : developer.mozilla.org/fr/JavaScript/Référence/Global_Objects/

3 votes

Infiniment utile dans le débogueur JS d'IE8.

21 votes

Cela ne fonctionne pas pour les objets avec des chaînes de référence circulaires - Chrome donne une erreur : TypeError : Conversion d'une structure circulaire en JSON

327voto

Lukman Points 10217

Si vous utilisez Firefox, alert(object.toSource()) devrait suffire à des fins de débogage simple.

7 votes

Également pris en charge par IE9 (si pas avant), mais pas par Chrome 17 ou Safari 5.

12 votes

Existe-t-il un moyen de faire quelque chose de similaire pour les différents navigateurs ?

62 votes

Dans les navigateurs récents, vous pouvez utiliser console.dir(object) pour vider le contenu d'un objet dans la console de débogage (F12 sur la plupart des navigateurs).

79voto

Miguel Ventura Points 6172

Outre l'utilisation d'un débogueur, vous pouvez également accéder à tous les éléments d'un objet à l'aide d'une commande de type foreach boucle. Les éléments suivants printObject La fonction doit alert() votre objet montrant toutes les propriétés et les valeurs respectives.

function printObject(o) {
  var out = '';
  for (var p in o) {
    out += p + ': ' + o[p] + '\n';
  }
  alert(out);
}

// now test it:
var myObject = {'something': 1, 'other thing': 2};
printObject(myObject);

L'utilisation d'un outil d'inspection DOM est préférable car il vous permet de creuser sous les propriétés qui sont les objets eux-mêmes. Firefox dispose de FireBug mais tous les autres navigateurs majeurs (IE, Chrome, Safari) ont également des outils de débogage intégrés que vous devriez consulter.

6 votes

Vous pourriez ajouter if (o.hasOwnProperty(p)) à l'intérieur de la boucle.

3 votes

C'est une bonne idée, mais pour le débogage, je préfère tout voir. Ce qui serait peut-être encore mieux serait quelque chose comme : for (var p in o) { if (!o.hasOwnProperty(p)) out += '(inherited) ' ; out += p + ' : ' + o[p] + ' \n ' ; }

33voto

CMS Points 315406

Si vous souhaitez simplement avoir une représentation sous forme de chaîne d'un objet, vous pouvez utiliser la fonction JSON.stringify en utilisant une fonction Bibliothèque JSON .

0 votes

C'est la meilleure réponse à mon avis, elle fonctionne sur tous les navigateurs.

8voto

Jonathan Feinberg Points 24791

Vous devriez envisager d'utiliser FireBug pour le débogage de JavaScript. Il vous permettra d'inspecter de manière interactive toutes vos variables, et même de parcourir les fonctions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X