I'm running this in node.js:
> x = { 'foo' : 'bar' }
{ foo: 'bar' }
> console.log(x)
{ foo: 'bar' }
undefined
> console.log("hmm: " + x)
hmm: [object Object]
undefined
What I don't understand is why console.log(x)
"pretty-prints" the object, whereas string concatenation "ugly-prints" it. And more importantly, what's the best way to make it print hmm: { foo: 'bar' }
?
The + x
coerces the object x
into a string, which is just [object Object]
:
The pretty printing is a very nice and probably very complex underlying code that someone implemented as part of the console
object and the log
method.
Try this:
console.log("hmm: ", x);
'console.log' is an overloaded function that accepts a list of parameters that are either passed by copy (string|number|boolean) or by reference (everything else).
In the case of values passed by copy, the value is printed by casting it as a string.
In the case of values passed by reference, the value is pretty printed as the browser sees fit.
The plus sign operator (+) is overloaded. When both sides of the operator are numbers, the sum of the two operators is returned.
If either side of the operator is a string, then both sides will be cast as string and the concatenation of those two strings will be returned.
console.log("hmm: " + x);
is the same as writing
console.log(String("hmm: ") + String(x));
Prevent the implicit string casting by swapping the plus sign (+) with a comma (,)
console.log("hmm: ", x);
For a more in depth description of the 'console.log' function, see:
https://developer.mozilla.org/en-US/docs/DOM/console.log
For a more in depth description on the plus sign operator (+), see:
http://www.w3schools.com/js/js_operators.asp
打印附加字符串的对象时使用JSON.stringify
console.log("Haa"+JSON.stringify(x))
you can use console.log(JSON.stringify(yourObject));
to print your object. it work!
You have multiple options:
process.stdout.write('hmm: ')
console.dir(x)
Another...
var util = require('util')
process.stdout.write('hmm: ')
console.log(util.inspect(x, true, 10, true))
See util.inspect docs for more info.
Edit: Sorry, my mind thought I read Node.js. This is valid for Node.js only. So, I'll leave it for any Googlers.
Edit2: I'm not crazy, I just need sleep. You did write Node.js. I'm going to add it as a tag.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.