J'exécute ceci dans node.js:
> x = { 'foo' : 'bar' }
{ foo: 'bar' }
> console.log(x)
{ foo: 'bar' }
undefined
> console.log("hmm: " + x)
hmm: [object Object]
undefined
Ce que je ne comprends pas, c'est pourquoi console.log(x)
"jolie-imprime" l'objet, alors que la concaténation de chaîne "laide-imprime" l'objet. Et plus important encore, quelle est la meilleure façon de le faire imprimer hmm: { foo: 'bar' }
?
Le + x
contraint l'objet x
dans une chaîne qui n'est que [object Object]
:
La jolie impression est un code sous-jacent très agréable et probablement très complexe que quelqu'un a implémenté dans le cadre de l'objet console
et de la méthode log
.
Essaye ça:
console.log("hmm: ", x);
'console.log' est une fonction surchargée qui accepte une liste de paramètres qui sont soit passés par copie (chaîne | nombre | booléen) ou par référence (tout le reste).
Dans le cas de valeurs transmises par copie, la valeur est imprimée en la convertissant en chaîne.
Dans le cas de valeurs passées par référence, la valeur est assez imprimée comme le navigateur le juge bon.
L'opérateur de signe plus (+) est surchargé. Lorsque les deux côtés de l'opérateur sont des nombres, la somme des deux opérateurs est renvoyée.
Si l'un des côtés de l'opérateur est une chaîne, les deux côtés seront convertis en chaîne et la concaténation de ces deux chaînes sera renvoyée.
console.log("hmm: " + x);
revient à écrire
console.log(String("hmm: ") + String(x));
Empêcher la conversion implicite de chaînes en échangeant le signe plus (+) par une virgule (,)
console.log("hmm: ", x);
Pour une description plus approfondie de la fonction 'console.log', voir:
https://developer.mozilla.org/en-US/docs/DOM/console.log
Pour une description plus approfondie de l'opérateur de signe plus (+), voir:
http://www.w3schools.com/js/js_operators.asp
Utilisation JSON.stringify
lors de l'impression d'un objet avec une chaîne ajoutée
console.log("Haa"+JSON.stringify(x))
Vous avez plusieurs options:
process.stdout.write('hmm: ')
console.dir(x)
Un autre...
var util = require('util')
process.stdout.write('hmm: ')
console.log(util.inspect(x, true, 10, true))
Voir til.inspect docs pour plus d'informations.
Edit: Désolé, mon esprit pensait avoir lu Node.js. Ceci n'est valable que pour Node.js. Donc, je vais le laisser à tous les Googleurs.
Edit2: Je ne suis pas fou, j'ai juste besoin de dormir. Vous avez écrit Node.js. Je vais l'ajouter comme balise.
vous pouvez utiliser console.log(JSON.stringify(yourObject));
pour imprimer votre objet. ça marche!