web-dev-qa-db-fra.com

Javascript console.log (objet) vs chaîne de concaténation

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' }?

34
John Zwinck

Le + x contraint l'objet x dans une chaîne qui n'est que [object Object]:

http://jsfiddle.net/Ze32g/

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);
62
Explosion Pills

La fonction console.log

'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 +

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));

Solution

Empêcher la conversion implicite de chaînes en échangeant le signe plus (+) par une virgule (,)

console.log("hmm: ", x);

Plus d'informations

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

14
Aaren Cordova

Utilisation JSON.stringify lors de l'impression d'un objet avec une chaîne ajoutée

console.log("Haa"+JSON.stringify(x))
6

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.

3
JP Richardson

vous pouvez utiliser console.log(JSON.stringify(yourObject)); pour imprimer votre objet. ça marche!

1
user11737484