How can I display a JavaScript object?
How do I display the content of a JavaScript object in a string format like when we alert
a variable?
The same formatted way I want to display an object.
javascript javascript-objects
add a comment |
How do I display the content of a JavaScript object in a string format like when we alert
a variable?
The same formatted way I want to display an object.
javascript javascript-objects
7
Would you please reword your question? What do you mean by "formatted way"? As in, with rich formatting, like bold/italic/etc?
– Sasha Chedygov
Jun 5 '09 at 19:03
is there a way to display the runtime value of a variable by printing the value of the variable using some console commands?
– BlackPanther
Aug 3 '15 at 6:54
1
@BlackPanther Just doconsole.log("", yourObject1, yourObject2, yourObject3, etc...);
. A shorter version is to just doconsole.log(yourObject1, yourObject2, etc...);
.
– tom_mai78101
Jul 31 '17 at 11:52
Can you please select a better answer that more accurately reflects community consensus?
– HoldOffHunger
Apr 3 '18 at 16:54
Like thisconsole.log('a string', aNumber, anObject)
– onmyway133
Oct 15 '18 at 11:58
add a comment |
How do I display the content of a JavaScript object in a string format like when we alert
a variable?
The same formatted way I want to display an object.
javascript javascript-objects
How do I display the content of a JavaScript object in a string format like when we alert
a variable?
The same formatted way I want to display an object.
javascript javascript-objects
javascript javascript-objects
edited Nov 8 '16 at 12:57
George Kagan
3,41253548
3,41253548
asked Jun 5 '09 at 19:01
maxjackiemaxjackie
8,15652135
8,15652135
7
Would you please reword your question? What do you mean by "formatted way"? As in, with rich formatting, like bold/italic/etc?
– Sasha Chedygov
Jun 5 '09 at 19:03
is there a way to display the runtime value of a variable by printing the value of the variable using some console commands?
– BlackPanther
Aug 3 '15 at 6:54
1
@BlackPanther Just doconsole.log("", yourObject1, yourObject2, yourObject3, etc...);
. A shorter version is to just doconsole.log(yourObject1, yourObject2, etc...);
.
– tom_mai78101
Jul 31 '17 at 11:52
Can you please select a better answer that more accurately reflects community consensus?
– HoldOffHunger
Apr 3 '18 at 16:54
Like thisconsole.log('a string', aNumber, anObject)
– onmyway133
Oct 15 '18 at 11:58
add a comment |
7
Would you please reword your question? What do you mean by "formatted way"? As in, with rich formatting, like bold/italic/etc?
– Sasha Chedygov
Jun 5 '09 at 19:03
is there a way to display the runtime value of a variable by printing the value of the variable using some console commands?
– BlackPanther
Aug 3 '15 at 6:54
1
@BlackPanther Just doconsole.log("", yourObject1, yourObject2, yourObject3, etc...);
. A shorter version is to just doconsole.log(yourObject1, yourObject2, etc...);
.
– tom_mai78101
Jul 31 '17 at 11:52
Can you please select a better answer that more accurately reflects community consensus?
– HoldOffHunger
Apr 3 '18 at 16:54
Like thisconsole.log('a string', aNumber, anObject)
– onmyway133
Oct 15 '18 at 11:58
7
7
Would you please reword your question? What do you mean by "formatted way"? As in, with rich formatting, like bold/italic/etc?
– Sasha Chedygov
Jun 5 '09 at 19:03
Would you please reword your question? What do you mean by "formatted way"? As in, with rich formatting, like bold/italic/etc?
– Sasha Chedygov
Jun 5 '09 at 19:03
is there a way to display the runtime value of a variable by printing the value of the variable using some console commands?
– BlackPanther
Aug 3 '15 at 6:54
is there a way to display the runtime value of a variable by printing the value of the variable using some console commands?
– BlackPanther
Aug 3 '15 at 6:54
1
1
@BlackPanther Just do
console.log("", yourObject1, yourObject2, yourObject3, etc...);
. A shorter version is to just do console.log(yourObject1, yourObject2, etc...);
.– tom_mai78101
Jul 31 '17 at 11:52
@BlackPanther Just do
console.log("", yourObject1, yourObject2, yourObject3, etc...);
. A shorter version is to just do console.log(yourObject1, yourObject2, etc...);
.– tom_mai78101
Jul 31 '17 at 11:52
Can you please select a better answer that more accurately reflects community consensus?
– HoldOffHunger
Apr 3 '18 at 16:54
Can you please select a better answer that more accurately reflects community consensus?
– HoldOffHunger
Apr 3 '18 at 16:54
Like this
console.log('a string', aNumber, anObject)
– onmyway133
Oct 15 '18 at 11:58
Like this
console.log('a string', aNumber, anObject)
– onmyway133
Oct 15 '18 at 11:58
add a comment |
35 Answers
35
active
oldest
votes
1 2
next
With Firefox
If you want to print the object for debugging purposes, I suggest instead installing Firebug for Firefox and using the code:
console.log(obj)
With Chrome
var obj = {prop1: 'prop1Value', prop2: 'prop2Value', child: {childProp1: 'childProp1Value'}}
console.log(obj)
will display
Note : you must only log the object. For example this won't work :
console.log('My object : ' + obj)
40
That function also works on Google Chrome when using the JavaScript Console (Shift+Control+J or Shift+Control+I, depending on the Chrome version). Also note thatconsole.log(obj1, obj2)
works very nicely, too, so you don't have to callconsole.log()
for every object when logging multiple variables. Also, always remember to remove all such calls in production, as it will break browsers that do not implement it (such as Internet Explorer).
– Felix
Apr 22 '10 at 9:31
340
This does not work it prints [object Object]
– Doug Molineux
Dec 13 '10 at 21:17
99
Yes it prints [object Object] but it has a little expando-toggly button beside it that lets you inspect the contents of the object.
– hughes
Jul 5 '11 at 13:46
11
@hughes it actually can do both. i have an object i created with: var obj = { "foo" : false }; and another object that is being passed into a callback from a server, the one passed through the callback prints with the little arrow so you can open it up, the statically created one just prints [object Object] with no arrow. I'm trying to figure this out too, any other thoughts?
– benstraw
Jul 8 '11 at 0:08
117
console.log("id:"+obj);
won't output correctly as it outputs a string as you see it there, you need to specify it like this:console.log("id:"); console.log(obj);
– Anriëtte Myburgh
Mar 5 '13 at 11:06
|
show 22 more comments
Use native JSON.stringify
method.
Works with nested objects and all major browsers support this method.
str = JSON.stringify(obj);
str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output.
console.log(str); // Logs output to dev tools console.
alert(str); // Displays output using window.alert()
Link to Mozilla API Reference and other examples.
obj = JSON.parse(str); // Reverses above operation (Just in case if needed.)
Use a custom JSON.stringify replacer if you
encounter this Javascript error
"Uncaught TypeError: Converting circular structure to JSON"
310
For more readable output try JSON.stringify(obj, null, 4). This'll write it out as neatly indented text
– Ben Clayton
Jun 5 '11 at 12:49
2
JSON.stringify can only show a small subset of javascript values, and will throw an exception for the rest - console.log does not have this problem.
– Marc Lehmann
Oct 1 '13 at 13:46
10
If you are a newbie like me, don't forgetconsole.log
i.e.console.log(JSON.stringify(obj,null, 4));
– nilesh
Dec 30 '13 at 3:49
2
"Uncaught TypeError: Converting circular structure to JSON" when ob=window.
– Michael
Jan 13 '14 at 23:04
1
I had cases where it did not work : it showed{}
for a non-empty object. So be sure to check withconsole.log(obj)
before thinking your object is empty whenstrigify()
returns{}
.
– Sindarus
Aug 9 '16 at 14:31
|
show 6 more comments
var output = '';
for (var property in object) {
output += property + ': ' + object[property]+'; ';
}
alert(output);
2
I was looking for a php styleforeach()
thanks!
– David Yell
Oct 18 '10 at 15:14
1
This is what exactly i want. I am using google maps v3 and the directionrenderer returns an object. That has four items and in that one objects name keeps changing so we need to find that. For that this method really helped. Besides this way we can get all the names of the properties and objects. Or is there any other way to find the names of the objects and properties?
– Jayapal Chandran
Apr 28 '11 at 14:08
33
+1, not all javascript is run in browsers or can be debugged in them.
– Bill Yang
Jul 25 '11 at 2:19
3
You probably want to mask out the built in cruft with hasOwnProperty most of the time.
– John
Apr 20 '12 at 0:58
5
Omg -- 0: [; 1: o; 2: b; 3: j; 4: e; 5: c; 6: t; 7: ; 8: O; 9: b; 10: j; 11: e; 12: c; 13: t; 14: ];
– JSideris
Feb 20 '15 at 8:16
|
show 3 more comments
console.dir(object)
:
Displays an interactive listing of the properties of a specified JavaScript object. This listing lets you use disclosure triangles to examine the contents of child objects.
Note that the console.dir()
feature is non-standard. See MDN Web Docs
9
this is the best answer
– davidhq
May 30 '15 at 15:09
5
I am surprised how few people have accepted this answer. This is a very good solution.
– CtheGood
Aug 18 '15 at 18:27
This is the best solution.
– Nevin Madhukar K
May 8 '18 at 6:35
add a comment |
try this :
console.log(JSON.stringify(obj))
This will print the stringify version of object. So instead of [object]
as an output you will get the content of object.
4
typeerror: Converting circular structure to JSON
?
– Kaiden Prince
Oct 18 '15 at 23:37
@KaidenPrince see this answer for your error: stackoverflow.com/questions/4816099/… It is likely a DOM element in your object. If that's the case, you're best attempting to just log to the console in chrome or firefox and inspect there. Otherwise you'd have to strip out all circular elements before the JSON.stringify is called in order for it to work.
– Ace Hyzer
Oct 28 '15 at 20:55
Solution is to simply split into 2 separate commands believe it or not: console.log("id:"); console.log(obj);
– Collin Chaffin
Mar 28 '17 at 21:57
Why downvote?, please explain reason for downvote.
– Abhishek Goel
May 13 '17 at 8:40
add a comment |
Well, Firefox (thanks to @Bojangles for detailed information) has Object.toSource()
method which prints objects as JSON and function(){}
.
That's enough for most debugging purposes, I guess.
5
Object.toSource() doesn't seem to work for Chrome, is this expected? Or does Chrome not fall under "advanced browsers"? =)
– tstyle
Feb 13 '11 at 12:10
Obviously it doesn't :(
– alamar
Feb 24 '11 at 13:32
40
Old thread, just found it through Google..toSource()
is actually Firefox only. Just thought I'd let you know.
– Bojangles
Aug 26 '11 at 12:14
too bad, I have Chrome and it doesnt work
– Nulik
Jan 5 '18 at 22:54
add a comment |
If you want to use alert, to print your object, you can do this:
alert("myObject is " + myObject.toSource());
It should print each property and its corresponding value in string format.
14
toSource() doesn't work in non-gecko browsers (e.g. Chrome, Safari)
– Yarin
Mar 7 '11 at 18:59
5
However this works fine for Firefox (Gecko) Browsers COOL !!!!
– Vinothkumar Arputharaj
Jul 5 '11 at 13:18
add a comment |
In NodeJS you can print an object by using util.inspect(obj)
. Be sure to state the depth or you'll only have a shallow print of the object.
add a comment |
Function:
var print = function(o){
var str='';
for(var p in o){
if(typeof o[p] == 'string'){
str+= p + ': ' + o[p]+'; </br>';
}else{
str+= p + ': { </br>' + print(o[p]) + '}';
}
}
return str;
}
Usage:
var myObject = {
name: 'Wilson Page',
contact: {
email: 'wilson@hotmail.com',
tel: '123456789'
}
}
$('body').append( print(myObject) );
Example:
http://jsfiddle.net/WilsonPage/6eqMn/
Print method call the browser to print the page to pdf :p
– Marwen Trabelsi
May 31 '15 at 22:42
doesn't seem to work for integers
– jsh
Sep 25 '15 at 19:58
@jsh you should turn the if-else around and check for object instead of only string. updated fiddle: jsfiddle.net/6eqMn/594
– Michael Walter
Feb 15 '16 at 16:01
@wilsonpage This is failing if I add integer value to tel property :(
– ni3
Aug 23 '17 at 9:20
add a comment |
If you would like to see data in tabular format you can use
console.table(obj);
Table can be sorted if you click on the table column.
You can also select what columns to show:
console.table(obj, ['firstName', 'lastName']);
You can find more information about console.table here
add a comment |
As it was said before best and most simply way i found was
var getPrintObject=function(object)
{
return JSON.stringify(object);
}
This is the easiest and fastest solution, however it doesn't work on big objects such asnavigator
.
– someguy234
Dec 4 '14 at 0:30
add a comment |
Use this:
console.log('print object: ' + JSON.stringify(session));
add a comment |
To print the full object with Node.js with colors as a bonus:
console.dir(object, {depth: null, colors: true})
Colors are of course optional, 'depth: null' will print the full object.
The options don't seem to be supported in browsers.
References:
https://developer.mozilla.org/en-US/docs/Web/API/Console/dir
https://nodejs.org/api/console.html#console_console_dir_obj_options
waaaah life saver :)
– Deunz
Feb 20 '18 at 11:36
add a comment |
If you would like to print the object of its full length, can use
console.log(require('util').inspect(obj, {showHidden: false, depth: null})
If you want to print the object by converting it to the string then
console.log(JSON.stringify(obj));
JSON.stringify
works for me.
– AMIC MING
Jul 17 '17 at 19:07
you would need to add theJSON.stringify
when you try to concatenate with a string object. If you useconsole.log(object)
, it should pretty print the contents of the object
– Satadru Biswas
Aug 1 '17 at 22:36
add a comment |
I needed a way to recursively print the object, which pagewil's answer provided (Thanks!). I updated it a little bit to include a way to print up to a certain level, and to add spacing so that it is properly indented based on the current level that we are in so that it is more readable.
// Recursive print of object
var print = function( o, maxLevel, level ) {
if ( typeof level == "undefined" ) {
level = 0;
}
if ( typeof level == "undefined" ) {
maxLevel = 0;
}
var str = '';
// Remove this if you don't want the pre tag, but make sure to remove
// the close pre tag on the bottom as well
if ( level == 0 ) {
str = '<pre>';
}
var levelStr = '';
for ( var x = 0; x < level; x++ ) {
levelStr += ' ';
}
if ( maxLevel != 0 && level >= maxLevel ) {
str += levelStr + '...</br>';
return str;
}
for ( var p in o ) {
if ( typeof o[p] == 'string' ) {
str += levelStr +
p + ': ' + o[p] + ' </br>';
} else {
str += levelStr +
p + ': { </br>' + print( o[p], maxLevel, level + 1 ) + levelStr + '}</br>';
}
}
// Remove this if you don't want the pre tag, but make sure to remove
// the open pre tag on the top as well
if ( level == 0 ) {
str += '</pre>';
}
return str;
};
Usage:
var pagewilsObject = {
name: 'Wilson Page',
contact: {
email: 'wilson@hotmail.com',
tel: '123456789'
}
}
// Recursive of whole object
$('body').append( print(pagewilsObject) );
// Recursive of myObject up to 1 level, will only show name
// and that there is a contact object
$('body').append( print(pagewilsObject, 1) );
add a comment |
(This has been added to my library at GitHub)
Reinventing the wheel here! None of these solutions worked for my situation. So, I quickly doctored up pagewil's answer. This one is not for printing to screen (via console, or textfield or whatever). It is, however, for data transport. This version seems to return a very similar result as toSource()
. I've not tried JSON.stringify
, but I assume this is about the same thing. The result of this function is a valid Javascript object declaration.
I wouldn't doubt if something like this was already on SO somewhere, but it was just shorter to make it than to spend a while searching past answers. And since this question was my top hit on google when I started searching about this; I figured putting it here might help others.
Anyhow, the result from this function will be a string representation of your object, even if your object has embedded objects and arrays, and even if those objects or arrays have even further embedded objects and arrays. (I heard you like to drink? So, I pimped your car with a cooler. And then, I pimped your cooler with a cooler. So, your cooler can drink, while your being cool.)
Arrays are stored with instead of
{}
and thus dont have key/value pairs, just values. Like regular arrays. Therefore, they get created like arrays do.
Also, all string (including key names) are quoted, this is not necessary unless those strings have special characters (like a space or a slash). But, I didn't feel like detecting this just to remove some quotes that would otherwise still work fine.
This resulting string can then be used with eval
or just dumping it into a var thru string manipulation. Thus, re-creating your object again, from text.
function ObjToSource(o){
if (!o) return 'null';
var k="",na=typeof(o.length)=="undefined"?1:0,str="";
for(var p in o){
if (na) k = "'"+p+ "':";
if (typeof o[p] == "string") str += k + "'" + o[p]+"',";
else if (typeof o[p] == "object") str += k + ObjToSource(o[p])+",";
else str += k + o[p] + ",";
}
if (na) return "{"+str.slice(0,-1)+"}";
else return "["+str.slice(0,-1)+"]";
}
Let me know if I messed it all up, works fine in my testing. Also, the only way I could think of to detect type array
was to check for the presence of length
. Because Javascript really stores arrays as objects, I cant actually check for type array
(there is no such type!). If anyone else knows a better way, I would love to hear it. Because, if your object also has a property named length
then this function will mistakenly treat it as an array.
EDIT: Added check for null valued objects. Thanks Brock Adams
EDIT: Below is the fixed function to be able to print infinitely recursive objects. This does not print the same as toSource
from FF because toSource
will print the infinite recursion one time, where as, this function will kill it immediately. This function runs slower than the one above, so I'm adding it here instead of editing the above function, as its only needed if you plan to pass objects that link back to themselves, somewhere.
const ObjToSource=(o)=> {
if (!o) return null;
let str="",na=0,k,p;
if (typeof(o) == "object") {
if (!ObjToSource.check) ObjToSource.check = new Array();
for (k=ObjToSource.check.length;na<k;na++) if (ObjToSource.check[na]==o) return '{}';
ObjToSource.check.push(o);
}
k="",na=typeof(o.length)=="undefined"?1:0;
for(p in o){
if (na) k = "'"+p+"':";
if (typeof o[p] == "string") str += k+"'"+o[p]+"',";
else if (typeof o[p] == "object") str += k+ObjToSource(o[p])+",";
else str += k+o[p]+",";
}
if (typeof(o) == "object") ObjToSource.check.pop();
if (na) return "{"+str.slice(0,-1)+"}";
else return "["+str.slice(0,-1)+"]";
}
Test:
var test1 = new Object();
test1.foo = 1;
test1.bar = 2;
var testobject = new Object();
testobject.run = 1;
testobject.fast = null;
testobject.loop = testobject;
testobject.dup = test1;
console.log(ObjToSource(testobject));
console.log(testobject.toSource());
Result:
{'run':1,'fast':null,'loop':{},'dup':{'foo':1,'bar':2}}
({run:1, fast:null, loop:{run:1, fast:null, loop:{}, dup:{foo:1, bar:2}}, dup:{foo:1, bar:2}})
NOTE: Trying to print document.body
is a terrible example. For one, FF just prints an empty object string when using toSource
. And when using the function above, FF crashes on SecurityError: The operation is insecure.
. And Chrome will crash on Uncaught RangeError: Maximum call stack size exceeded
. Clearly, document.body
was not meant to be converted to string. Because its either too large, or against security policy to access certain properties. Unless, I messed something up here, do tell!
Crash prone. TryObjToSource(document.body)
, for example.
– Brock Adams
Dec 28 '12 at 22:34
ok, I found the issue. I was not checking for null valued objects. That is fixed now. But, you still cant doObjToSource(document.body)
because of infinite recursion. Evendocument.body.toSource()
in FireFox returns an empty object.
– Pimp Trizkit
Dec 28 '12 at 23:35
@BrockAdams - There now its fixed for infinite recursion, howeverdocument.body
is still not printable. See NOTE.
– Pimp Trizkit
Dec 29 '12 at 1:57
document.body
was just a shortcut to pointing out some big problems. You've now fixed the worst of those and I already upvoted. (Although, I do believe that a different approach could handledocument.body
. Most of the answers here would not do well against it either.)
– Brock Adams
Dec 29 '12 at 2:17
Well, if you (or anyone else) got any ideas of how to get past the fact that such a large object will fill up the stack during recursion or bypass security restrictions. I would love to hear it. Thanks for the vote!
– Pimp Trizkit
Dec 29 '12 at 2:21
|
show 3 more comments
I always use console.log("object will be: ", obj, obj1)
.
this way I don't need to do the workaround with stringify with JSON.
All the properties of the object will be expanded nicely.
add a comment |
The simplest way:
console.log(obj);
Or with a message:
console.log("object is: %O", obj);
The first object you pass can contain one or more format specifiers. A format specifier is composed of the percent sign (%) followed by a letter that indicates the formatting to apply.
More format specifiers
2
This is an excellent answer. I am surprised it was down-voted and not just edited. Anyway, I have now edited it. Help up-vote this answer.
– user664833
Jan 23 '18 at 1:58
Very nice! And with link to all otherconsole.xxx()
options! Thank you.
– not2qubit
Feb 26 '18 at 10:30
add a comment |
var list = function(object) {
for(var key in object) {
console.log(key);
}
}
where object
is your object
or you can use this in chrome dev tools, "console" tab:
console.log(object);
1
i don't understand this downvotes...
– user3632930
Mar 9 '15 at 15:43
I think your answer is incomplete. (not me that cause downvote) This, yet, only print the key..
– Abdillah
Apr 22 '15 at 9:13
1
thanks for your answer, it has inspired me to do this:console.log(Object.keys(object));
while I know that only prints the properties keys, it is enough to me for my purposes ;)
– Wilson
Aug 5 '15 at 15:17
add a comment |
Assume object obj = {0:'John', 1:'Foo', 2:'Bar'}
Print object's content
for (var i in obj){
console.log(obj[i], i);
}
Console output (Chrome DevTools) :
John 0
Foo 1
Bar 2
Hope that helps!
add a comment |
Javascript Function
<script type="text/javascript">
function print_r(theObj){
if(theObj.constructor == Array || theObj.constructor == Object){
document.write("<ul>")
for(var p in theObj){
if(theObj[p].constructor == Array || theObj[p].constructor == Object){
document.write("<li>["+p+"] => "+typeof(theObj)+"</li>");
document.write("<ul>")
print_r(theObj[p]);
document.write("</ul>")
} else {
document.write("<li>["+p+"] => "+theObj[p]+"</li>");
}
}
document.write("</ul>")
}
}
</script>
Printing Object
<script type="text/javascript">
print_r(JAVACRIPT_ARRAY_OR_OBJECT);
</script>
via print_r in Javascript
I'm not sure if this is a bug in the js.do example I'm using, but this only seems to output the first full "branch" of the tree. ie it follows the first reference of the first reference... ad infinitum
– Jon Story
Feb 12 '15 at 12:47
add a comment |
Another way of displaying objects within the console is with JSON.stringify
. Checkout the below example:
var gandalf = {
"real name": "Gandalf",
"age (est)": 11000,
"race": "Maia",
"haveRetirementPlan": true,
"aliases": [
"Greyhame",
"Stormcrow",
"Mithrandir",
"Gandalf the Grey",
"Gandalf the White"
]
};
//to console log object, we cannot use console.log("Object gandalf: " + gandalf);
console.log("Object gandalf: ");
//this will show object gandalf ONLY in Google Chrome NOT in IE
console.log(gandalf);
//this will show object gandalf IN ALL BROWSERS!
console.log(JSON.stringify(gandalf));
//this will show object gandalf IN ALL BROWSERS! with beautiful indent
console.log(JSON.stringify(gandalf, null, 4));
add a comment |
A little helper function I always use in my projects for simple, speedy debugging via the console.
Inspiration taken from Laravel.
/**
* @param variable mixed The var to log to the console
* @param varName string Optional, will appear as a label before the var
*/
function dd(variable, varName) {
var varNameOutput;
varName = varName || '';
varNameOutput = varName ? varName + ':' : '';
console.warn(varNameOutput, variable, ' (' + (typeof variable) + ')');
}
Usage
dd(123.55);
outputs:
var obj = {field1: 'xyz', field2: 2016};
dd(obj, 'My Cool Obj');
1
+ for being inspired by Laravel
– Yevgeniy Afanasyev
Nov 23 '17 at 5:10
add a comment |
Here's a way to do it:
console.log("%o", obj);
Interesting. Is there any more information on this?
– Luke
Jun 12 '18 at 4:56
In the context of Chrome-dev-tool, google did mentioned this in this link. referring to the section "String substitution and formatting"
– chaco
Jun 15 '18 at 9:30
I saw it in mdn docs.
– tryzniak
Jun 15 '18 at 12:35
add a comment |
i used pagewil's print method, and it worked very nicely.
here is my slightly extended version with (sloppy) indents and distinct prop/ob delimiters:
var print = function(obj, delp, delo, ind){
delp = delp!=null ? delp : "t"; // property delimeter
delo = delo!=null ? delo : "n"; // object delimeter
ind = ind!=null ? ind : " "; // indent; ind+ind geometric addition not great for deep objects
var str='';
for(var prop in obj){
if(typeof obj[prop] == 'string' || typeof obj[prop] == 'number'){
var q = typeof obj[prop] == 'string' ? "" : ""; // make this "'" to quote strings
str += ind + prop + ': ' + q + obj[prop] + q + '; ' + delp;
}else{
str += ind + prop + ': {'+ delp + print(obj[prop],delp,delo,ind+ind) + ind + '}' + delo;
}
}
return str;
};
add a comment |
Another modification of pagewils code... his doesn't print out anything other than strings and leaves the number and boolean fields blank and I fixed the typo on the second typeof just inside the function as created by megaboss.
var print = function( o, maxLevel, level )
{
if ( typeof level == "undefined" )
{
level = 0;
}
if ( typeof maxlevel == "undefined" )
{
maxLevel = 0;
}
var str = '';
// Remove this if you don't want the pre tag, but make sure to remove
// the close pre tag on the bottom as well
if ( level == 0 )
{
str = '<pre>'; // can also be <pre>
}
var levelStr = '<br>';
for ( var x = 0; x < level; x++ )
{
levelStr += ' '; // all those spaces only work with <pre>
}
if ( maxLevel != 0 && level >= maxLevel )
{
str += levelStr + '...<br>';
return str;
}
for ( var p in o )
{
switch(typeof o[p])
{
case 'string':
case 'number': // .tostring() gets automatically applied
case 'boolean': // ditto
str += levelStr + p + ': ' + o[p] + ' <br>';
break;
case 'object': // this is where we become recursive
default:
str += levelStr + p + ': [ <br>' + print( o[p], maxLevel, level + 1 ) + levelStr + ']</br>';
break;
}
}
// Remove this if you don't want the pre tag, but make sure to remove
// the open pre tag on the top as well
if ( level == 0 )
{
str += '</pre>'; // also can be </pre>
}
return str;
};
add a comment |
Here's function.
function printObj(obj) {
console.log((function traverse(tab, obj) {
let str = "";
if(typeof obj !== 'object') {
return obj + ',';
}
if(Array.isArray(obj)) {
return '[' + obj.map(o=>JSON.stringify(o)).join(',') + ']' + ',';
}
str = str + '{n';
for(var p in obj) {
str = str + tab + ' ' + p + ' : ' + traverse(tab+' ', obj[p]) +'n';
}
str = str.slice(0,-2) + str.slice(-1);
str = str + tab + '},';
return str;
}('',obj).slice(0,-1)))};
It can show object using tab indent with readability.
Sure shot to crash your browser :P
– Satadru Biswas
Aug 1 '17 at 22:32
add a comment |
I think the best solution is to look through the Objects Keys, and then through the Objects Values if you really want to see what the object holds...
console.log(Object.keys(obj));
console.log(Object.values(obj));
There is also this new option if you're using ECMAScript 2016 or newer:
Object.keys(obj).forEach(e => console.log(`key=${e} value=${obj[e]}`));
The solution mentioned above : console.log(obj)
displays too many parameters and is not the most user friendly way to display the data you want. That is why I recommend logging keys and then values separately.
Would you expand the example to include Object and obj.
– historystamp
Dec 28 '18 at 23:30
add a comment |
If you're looking for something that can return a prettified string of any javascript object, check out https://github.com/fresheneesz/beautinator . An example:
var result = beautinator({ "font-size": "26px","font-family": "'Open Sans', sans-serif",color: "white", overflow: "hidden",padding: "4px 4px 4px 8px",Text: { display: "block", width: "100%","text-align": "center", "padding-left": "2px","word-break": "break-word"}})
console.log(result)
Results in:
{ "font-size": "26px",
"font-family": "'Open Sans', sans-serif",
color: "white", overflow: "hidden",
padding: "4px 4px 4px 8px",
Text: { display: "block", width: "100%",
"text-align": "center", "padding-left": "2px",
"word-break": "break-word"
}
}
It even works if there are functions in your object.
add a comment |
A simple way to show the contents of the object is using console.log as shown below
console.log("Object contents are ", obj);
Please note that I am not using '+' to concatenate the object. If I use '+' than I will only get the string representation if object, something like [Object object].
add a comment |
1 2
next
protected by Community♦ Jan 3 '12 at 21:23
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
35 Answers
35
active
oldest
votes
35 Answers
35
active
oldest
votes
active
oldest
votes
active
oldest
votes
1 2
next
With Firefox
If you want to print the object for debugging purposes, I suggest instead installing Firebug for Firefox and using the code:
console.log(obj)
With Chrome
var obj = {prop1: 'prop1Value', prop2: 'prop2Value', child: {childProp1: 'childProp1Value'}}
console.log(obj)
will display
Note : you must only log the object. For example this won't work :
console.log('My object : ' + obj)
40
That function also works on Google Chrome when using the JavaScript Console (Shift+Control+J or Shift+Control+I, depending on the Chrome version). Also note thatconsole.log(obj1, obj2)
works very nicely, too, so you don't have to callconsole.log()
for every object when logging multiple variables. Also, always remember to remove all such calls in production, as it will break browsers that do not implement it (such as Internet Explorer).
– Felix
Apr 22 '10 at 9:31
340
This does not work it prints [object Object]
– Doug Molineux
Dec 13 '10 at 21:17
99
Yes it prints [object Object] but it has a little expando-toggly button beside it that lets you inspect the contents of the object.
– hughes
Jul 5 '11 at 13:46
11
@hughes it actually can do both. i have an object i created with: var obj = { "foo" : false }; and another object that is being passed into a callback from a server, the one passed through the callback prints with the little arrow so you can open it up, the statically created one just prints [object Object] with no arrow. I'm trying to figure this out too, any other thoughts?
– benstraw
Jul 8 '11 at 0:08
117
console.log("id:"+obj);
won't output correctly as it outputs a string as you see it there, you need to specify it like this:console.log("id:"); console.log(obj);
– Anriëtte Myburgh
Mar 5 '13 at 11:06
|
show 22 more comments
With Firefox
If you want to print the object for debugging purposes, I suggest instead installing Firebug for Firefox and using the code:
console.log(obj)
With Chrome
var obj = {prop1: 'prop1Value', prop2: 'prop2Value', child: {childProp1: 'childProp1Value'}}
console.log(obj)
will display
Note : you must only log the object. For example this won't work :
console.log('My object : ' + obj)
40
That function also works on Google Chrome when using the JavaScript Console (Shift+Control+J or Shift+Control+I, depending on the Chrome version). Also note thatconsole.log(obj1, obj2)
works very nicely, too, so you don't have to callconsole.log()
for every object when logging multiple variables. Also, always remember to remove all such calls in production, as it will break browsers that do not implement it (such as Internet Explorer).
– Felix
Apr 22 '10 at 9:31
340
This does not work it prints [object Object]
– Doug Molineux
Dec 13 '10 at 21:17
99
Yes it prints [object Object] but it has a little expando-toggly button beside it that lets you inspect the contents of the object.
– hughes
Jul 5 '11 at 13:46
11
@hughes it actually can do both. i have an object i created with: var obj = { "foo" : false }; and another object that is being passed into a callback from a server, the one passed through the callback prints with the little arrow so you can open it up, the statically created one just prints [object Object] with no arrow. I'm trying to figure this out too, any other thoughts?
– benstraw
Jul 8 '11 at 0:08
117
console.log("id:"+obj);
won't output correctly as it outputs a string as you see it there, you need to specify it like this:console.log("id:"); console.log(obj);
– Anriëtte Myburgh
Mar 5 '13 at 11:06
|
show 22 more comments
With Firefox
If you want to print the object for debugging purposes, I suggest instead installing Firebug for Firefox and using the code:
console.log(obj)
With Chrome
var obj = {prop1: 'prop1Value', prop2: 'prop2Value', child: {childProp1: 'childProp1Value'}}
console.log(obj)
will display
Note : you must only log the object. For example this won't work :
console.log('My object : ' + obj)
With Firefox
If you want to print the object for debugging purposes, I suggest instead installing Firebug for Firefox and using the code:
console.log(obj)
With Chrome
var obj = {prop1: 'prop1Value', prop2: 'prop2Value', child: {childProp1: 'childProp1Value'}}
console.log(obj)
will display
Note : you must only log the object. For example this won't work :
console.log('My object : ' + obj)
edited Jun 29 '18 at 11:55
Legends
7,35643974
7,35643974
answered Jun 5 '09 at 19:15
TriptychTriptych
154k29135165
154k29135165
40
That function also works on Google Chrome when using the JavaScript Console (Shift+Control+J or Shift+Control+I, depending on the Chrome version). Also note thatconsole.log(obj1, obj2)
works very nicely, too, so you don't have to callconsole.log()
for every object when logging multiple variables. Also, always remember to remove all such calls in production, as it will break browsers that do not implement it (such as Internet Explorer).
– Felix
Apr 22 '10 at 9:31
340
This does not work it prints [object Object]
– Doug Molineux
Dec 13 '10 at 21:17
99
Yes it prints [object Object] but it has a little expando-toggly button beside it that lets you inspect the contents of the object.
– hughes
Jul 5 '11 at 13:46
11
@hughes it actually can do both. i have an object i created with: var obj = { "foo" : false }; and another object that is being passed into a callback from a server, the one passed through the callback prints with the little arrow so you can open it up, the statically created one just prints [object Object] with no arrow. I'm trying to figure this out too, any other thoughts?
– benstraw
Jul 8 '11 at 0:08
117
console.log("id:"+obj);
won't output correctly as it outputs a string as you see it there, you need to specify it like this:console.log("id:"); console.log(obj);
– Anriëtte Myburgh
Mar 5 '13 at 11:06
|
show 22 more comments
40
That function also works on Google Chrome when using the JavaScript Console (Shift+Control+J or Shift+Control+I, depending on the Chrome version). Also note thatconsole.log(obj1, obj2)
works very nicely, too, so you don't have to callconsole.log()
for every object when logging multiple variables. Also, always remember to remove all such calls in production, as it will break browsers that do not implement it (such as Internet Explorer).
– Felix
Apr 22 '10 at 9:31
340
This does not work it prints [object Object]
– Doug Molineux
Dec 13 '10 at 21:17
99
Yes it prints [object Object] but it has a little expando-toggly button beside it that lets you inspect the contents of the object.
– hughes
Jul 5 '11 at 13:46
11
@hughes it actually can do both. i have an object i created with: var obj = { "foo" : false }; and another object that is being passed into a callback from a server, the one passed through the callback prints with the little arrow so you can open it up, the statically created one just prints [object Object] with no arrow. I'm trying to figure this out too, any other thoughts?
– benstraw
Jul 8 '11 at 0:08
117
console.log("id:"+obj);
won't output correctly as it outputs a string as you see it there, you need to specify it like this:console.log("id:"); console.log(obj);
– Anriëtte Myburgh
Mar 5 '13 at 11:06
40
40
That function also works on Google Chrome when using the JavaScript Console (Shift+Control+J or Shift+Control+I, depending on the Chrome version). Also note that
console.log(obj1, obj2)
works very nicely, too, so you don't have to call console.log()
for every object when logging multiple variables. Also, always remember to remove all such calls in production, as it will break browsers that do not implement it (such as Internet Explorer).– Felix
Apr 22 '10 at 9:31
That function also works on Google Chrome when using the JavaScript Console (Shift+Control+J or Shift+Control+I, depending on the Chrome version). Also note that
console.log(obj1, obj2)
works very nicely, too, so you don't have to call console.log()
for every object when logging multiple variables. Also, always remember to remove all such calls in production, as it will break browsers that do not implement it (such as Internet Explorer).– Felix
Apr 22 '10 at 9:31
340
340
This does not work it prints [object Object]
– Doug Molineux
Dec 13 '10 at 21:17
This does not work it prints [object Object]
– Doug Molineux
Dec 13 '10 at 21:17
99
99
Yes it prints [object Object] but it has a little expando-toggly button beside it that lets you inspect the contents of the object.
– hughes
Jul 5 '11 at 13:46
Yes it prints [object Object] but it has a little expando-toggly button beside it that lets you inspect the contents of the object.
– hughes
Jul 5 '11 at 13:46
11
11
@hughes it actually can do both. i have an object i created with: var obj = { "foo" : false }; and another object that is being passed into a callback from a server, the one passed through the callback prints with the little arrow so you can open it up, the statically created one just prints [object Object] with no arrow. I'm trying to figure this out too, any other thoughts?
– benstraw
Jul 8 '11 at 0:08
@hughes it actually can do both. i have an object i created with: var obj = { "foo" : false }; and another object that is being passed into a callback from a server, the one passed through the callback prints with the little arrow so you can open it up, the statically created one just prints [object Object] with no arrow. I'm trying to figure this out too, any other thoughts?
– benstraw
Jul 8 '11 at 0:08
117
117
console.log("id:"+obj);
won't output correctly as it outputs a string as you see it there, you need to specify it like this: console.log("id:"); console.log(obj);
– Anriëtte Myburgh
Mar 5 '13 at 11:06
console.log("id:"+obj);
won't output correctly as it outputs a string as you see it there, you need to specify it like this: console.log("id:"); console.log(obj);
– Anriëtte Myburgh
Mar 5 '13 at 11:06
|
show 22 more comments
Use native JSON.stringify
method.
Works with nested objects and all major browsers support this method.
str = JSON.stringify(obj);
str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output.
console.log(str); // Logs output to dev tools console.
alert(str); // Displays output using window.alert()
Link to Mozilla API Reference and other examples.
obj = JSON.parse(str); // Reverses above operation (Just in case if needed.)
Use a custom JSON.stringify replacer if you
encounter this Javascript error
"Uncaught TypeError: Converting circular structure to JSON"
310
For more readable output try JSON.stringify(obj, null, 4). This'll write it out as neatly indented text
– Ben Clayton
Jun 5 '11 at 12:49
2
JSON.stringify can only show a small subset of javascript values, and will throw an exception for the rest - console.log does not have this problem.
– Marc Lehmann
Oct 1 '13 at 13:46
10
If you are a newbie like me, don't forgetconsole.log
i.e.console.log(JSON.stringify(obj,null, 4));
– nilesh
Dec 30 '13 at 3:49
2
"Uncaught TypeError: Converting circular structure to JSON" when ob=window.
– Michael
Jan 13 '14 at 23:04
1
I had cases where it did not work : it showed{}
for a non-empty object. So be sure to check withconsole.log(obj)
before thinking your object is empty whenstrigify()
returns{}
.
– Sindarus
Aug 9 '16 at 14:31
|
show 6 more comments
Use native JSON.stringify
method.
Works with nested objects and all major browsers support this method.
str = JSON.stringify(obj);
str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output.
console.log(str); // Logs output to dev tools console.
alert(str); // Displays output using window.alert()
Link to Mozilla API Reference and other examples.
obj = JSON.parse(str); // Reverses above operation (Just in case if needed.)
Use a custom JSON.stringify replacer if you
encounter this Javascript error
"Uncaught TypeError: Converting circular structure to JSON"
310
For more readable output try JSON.stringify(obj, null, 4). This'll write it out as neatly indented text
– Ben Clayton
Jun 5 '11 at 12:49
2
JSON.stringify can only show a small subset of javascript values, and will throw an exception for the rest - console.log does not have this problem.
– Marc Lehmann
Oct 1 '13 at 13:46
10
If you are a newbie like me, don't forgetconsole.log
i.e.console.log(JSON.stringify(obj,null, 4));
– nilesh
Dec 30 '13 at 3:49
2
"Uncaught TypeError: Converting circular structure to JSON" when ob=window.
– Michael
Jan 13 '14 at 23:04
1
I had cases where it did not work : it showed{}
for a non-empty object. So be sure to check withconsole.log(obj)
before thinking your object is empty whenstrigify()
returns{}
.
– Sindarus
Aug 9 '16 at 14:31
|
show 6 more comments
Use native JSON.stringify
method.
Works with nested objects and all major browsers support this method.
str = JSON.stringify(obj);
str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output.
console.log(str); // Logs output to dev tools console.
alert(str); // Displays output using window.alert()
Link to Mozilla API Reference and other examples.
obj = JSON.parse(str); // Reverses above operation (Just in case if needed.)
Use a custom JSON.stringify replacer if you
encounter this Javascript error
"Uncaught TypeError: Converting circular structure to JSON"
Use native JSON.stringify
method.
Works with nested objects and all major browsers support this method.
str = JSON.stringify(obj);
str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output.
console.log(str); // Logs output to dev tools console.
alert(str); // Displays output using window.alert()
Link to Mozilla API Reference and other examples.
obj = JSON.parse(str); // Reverses above operation (Just in case if needed.)
Use a custom JSON.stringify replacer if you
encounter this Javascript error
"Uncaught TypeError: Converting circular structure to JSON"
edited Feb 28 '18 at 23:48
Robert Harvey♦
148k33273417
148k33273417
answered Nov 27 '10 at 17:52
SandeepSandeep
20.2k22320
20.2k22320
310
For more readable output try JSON.stringify(obj, null, 4). This'll write it out as neatly indented text
– Ben Clayton
Jun 5 '11 at 12:49
2
JSON.stringify can only show a small subset of javascript values, and will throw an exception for the rest - console.log does not have this problem.
– Marc Lehmann
Oct 1 '13 at 13:46
10
If you are a newbie like me, don't forgetconsole.log
i.e.console.log(JSON.stringify(obj,null, 4));
– nilesh
Dec 30 '13 at 3:49
2
"Uncaught TypeError: Converting circular structure to JSON" when ob=window.
– Michael
Jan 13 '14 at 23:04
1
I had cases where it did not work : it showed{}
for a non-empty object. So be sure to check withconsole.log(obj)
before thinking your object is empty whenstrigify()
returns{}
.
– Sindarus
Aug 9 '16 at 14:31
|
show 6 more comments
310
For more readable output try JSON.stringify(obj, null, 4). This'll write it out as neatly indented text
– Ben Clayton
Jun 5 '11 at 12:49
2
JSON.stringify can only show a small subset of javascript values, and will throw an exception for the rest - console.log does not have this problem.
– Marc Lehmann
Oct 1 '13 at 13:46
10
If you are a newbie like me, don't forgetconsole.log
i.e.console.log(JSON.stringify(obj,null, 4));
– nilesh
Dec 30 '13 at 3:49
2
"Uncaught TypeError: Converting circular structure to JSON" when ob=window.
– Michael
Jan 13 '14 at 23:04
1
I had cases where it did not work : it showed{}
for a non-empty object. So be sure to check withconsole.log(obj)
before thinking your object is empty whenstrigify()
returns{}
.
– Sindarus
Aug 9 '16 at 14:31
310
310
For more readable output try JSON.stringify(obj, null, 4). This'll write it out as neatly indented text
– Ben Clayton
Jun 5 '11 at 12:49
For more readable output try JSON.stringify(obj, null, 4). This'll write it out as neatly indented text
– Ben Clayton
Jun 5 '11 at 12:49
2
2
JSON.stringify can only show a small subset of javascript values, and will throw an exception for the rest - console.log does not have this problem.
– Marc Lehmann
Oct 1 '13 at 13:46
JSON.stringify can only show a small subset of javascript values, and will throw an exception for the rest - console.log does not have this problem.
– Marc Lehmann
Oct 1 '13 at 13:46
10
10
If you are a newbie like me, don't forget
console.log
i.e. console.log(JSON.stringify(obj,null, 4));
– nilesh
Dec 30 '13 at 3:49
If you are a newbie like me, don't forget
console.log
i.e. console.log(JSON.stringify(obj,null, 4));
– nilesh
Dec 30 '13 at 3:49
2
2
"Uncaught TypeError: Converting circular structure to JSON" when ob=window.
– Michael
Jan 13 '14 at 23:04
"Uncaught TypeError: Converting circular structure to JSON" when ob=window.
– Michael
Jan 13 '14 at 23:04
1
1
I had cases where it did not work : it showed
{}
for a non-empty object. So be sure to check with console.log(obj)
before thinking your object is empty when strigify()
returns {}
.– Sindarus
Aug 9 '16 at 14:31
I had cases where it did not work : it showed
{}
for a non-empty object. So be sure to check with console.log(obj)
before thinking your object is empty when strigify()
returns {}
.– Sindarus
Aug 9 '16 at 14:31
|
show 6 more comments
var output = '';
for (var property in object) {
output += property + ': ' + object[property]+'; ';
}
alert(output);
2
I was looking for a php styleforeach()
thanks!
– David Yell
Oct 18 '10 at 15:14
1
This is what exactly i want. I am using google maps v3 and the directionrenderer returns an object. That has four items and in that one objects name keeps changing so we need to find that. For that this method really helped. Besides this way we can get all the names of the properties and objects. Or is there any other way to find the names of the objects and properties?
– Jayapal Chandran
Apr 28 '11 at 14:08
33
+1, not all javascript is run in browsers or can be debugged in them.
– Bill Yang
Jul 25 '11 at 2:19
3
You probably want to mask out the built in cruft with hasOwnProperty most of the time.
– John
Apr 20 '12 at 0:58
5
Omg -- 0: [; 1: o; 2: b; 3: j; 4: e; 5: c; 6: t; 7: ; 8: O; 9: b; 10: j; 11: e; 12: c; 13: t; 14: ];
– JSideris
Feb 20 '15 at 8:16
|
show 3 more comments
var output = '';
for (var property in object) {
output += property + ': ' + object[property]+'; ';
}
alert(output);
2
I was looking for a php styleforeach()
thanks!
– David Yell
Oct 18 '10 at 15:14
1
This is what exactly i want. I am using google maps v3 and the directionrenderer returns an object. That has four items and in that one objects name keeps changing so we need to find that. For that this method really helped. Besides this way we can get all the names of the properties and objects. Or is there any other way to find the names of the objects and properties?
– Jayapal Chandran
Apr 28 '11 at 14:08
33
+1, not all javascript is run in browsers or can be debugged in them.
– Bill Yang
Jul 25 '11 at 2:19
3
You probably want to mask out the built in cruft with hasOwnProperty most of the time.
– John
Apr 20 '12 at 0:58
5
Omg -- 0: [; 1: o; 2: b; 3: j; 4: e; 5: c; 6: t; 7: ; 8: O; 9: b; 10: j; 11: e; 12: c; 13: t; 14: ];
– JSideris
Feb 20 '15 at 8:16
|
show 3 more comments
var output = '';
for (var property in object) {
output += property + ': ' + object[property]+'; ';
}
alert(output);
var output = '';
for (var property in object) {
output += property + ': ' + object[property]+'; ';
}
alert(output);
edited Feb 19 '14 at 21:24
Ben McCann
9,825176287
9,825176287
answered Jun 5 '09 at 19:18
Flavius StefFlavius Stef
11.9k22122
11.9k22122
2
I was looking for a php styleforeach()
thanks!
– David Yell
Oct 18 '10 at 15:14
1
This is what exactly i want. I am using google maps v3 and the directionrenderer returns an object. That has four items and in that one objects name keeps changing so we need to find that. For that this method really helped. Besides this way we can get all the names of the properties and objects. Or is there any other way to find the names of the objects and properties?
– Jayapal Chandran
Apr 28 '11 at 14:08
33
+1, not all javascript is run in browsers or can be debugged in them.
– Bill Yang
Jul 25 '11 at 2:19
3
You probably want to mask out the built in cruft with hasOwnProperty most of the time.
– John
Apr 20 '12 at 0:58
5
Omg -- 0: [; 1: o; 2: b; 3: j; 4: e; 5: c; 6: t; 7: ; 8: O; 9: b; 10: j; 11: e; 12: c; 13: t; 14: ];
– JSideris
Feb 20 '15 at 8:16
|
show 3 more comments
2
I was looking for a php styleforeach()
thanks!
– David Yell
Oct 18 '10 at 15:14
1
This is what exactly i want. I am using google maps v3 and the directionrenderer returns an object. That has four items and in that one objects name keeps changing so we need to find that. For that this method really helped. Besides this way we can get all the names of the properties and objects. Or is there any other way to find the names of the objects and properties?
– Jayapal Chandran
Apr 28 '11 at 14:08
33
+1, not all javascript is run in browsers or can be debugged in them.
– Bill Yang
Jul 25 '11 at 2:19
3
You probably want to mask out the built in cruft with hasOwnProperty most of the time.
– John
Apr 20 '12 at 0:58
5
Omg -- 0: [; 1: o; 2: b; 3: j; 4: e; 5: c; 6: t; 7: ; 8: O; 9: b; 10: j; 11: e; 12: c; 13: t; 14: ];
– JSideris
Feb 20 '15 at 8:16
2
2
I was looking for a php style
foreach()
thanks!– David Yell
Oct 18 '10 at 15:14
I was looking for a php style
foreach()
thanks!– David Yell
Oct 18 '10 at 15:14
1
1
This is what exactly i want. I am using google maps v3 and the directionrenderer returns an object. That has four items and in that one objects name keeps changing so we need to find that. For that this method really helped. Besides this way we can get all the names of the properties and objects. Or is there any other way to find the names of the objects and properties?
– Jayapal Chandran
Apr 28 '11 at 14:08
This is what exactly i want. I am using google maps v3 and the directionrenderer returns an object. That has four items and in that one objects name keeps changing so we need to find that. For that this method really helped. Besides this way we can get all the names of the properties and objects. Or is there any other way to find the names of the objects and properties?
– Jayapal Chandran
Apr 28 '11 at 14:08
33
33
+1, not all javascript is run in browsers or can be debugged in them.
– Bill Yang
Jul 25 '11 at 2:19
+1, not all javascript is run in browsers or can be debugged in them.
– Bill Yang
Jul 25 '11 at 2:19
3
3
You probably want to mask out the built in cruft with hasOwnProperty most of the time.
– John
Apr 20 '12 at 0:58
You probably want to mask out the built in cruft with hasOwnProperty most of the time.
– John
Apr 20 '12 at 0:58
5
5
Omg -- 0: [; 1: o; 2: b; 3: j; 4: e; 5: c; 6: t; 7: ; 8: O; 9: b; 10: j; 11: e; 12: c; 13: t; 14: ];
– JSideris
Feb 20 '15 at 8:16
Omg -- 0: [; 1: o; 2: b; 3: j; 4: e; 5: c; 6: t; 7: ; 8: O; 9: b; 10: j; 11: e; 12: c; 13: t; 14: ];
– JSideris
Feb 20 '15 at 8:16
|
show 3 more comments
console.dir(object)
:
Displays an interactive listing of the properties of a specified JavaScript object. This listing lets you use disclosure triangles to examine the contents of child objects.
Note that the console.dir()
feature is non-standard. See MDN Web Docs
9
this is the best answer
– davidhq
May 30 '15 at 15:09
5
I am surprised how few people have accepted this answer. This is a very good solution.
– CtheGood
Aug 18 '15 at 18:27
This is the best solution.
– Nevin Madhukar K
May 8 '18 at 6:35
add a comment |
console.dir(object)
:
Displays an interactive listing of the properties of a specified JavaScript object. This listing lets you use disclosure triangles to examine the contents of child objects.
Note that the console.dir()
feature is non-standard. See MDN Web Docs
9
this is the best answer
– davidhq
May 30 '15 at 15:09
5
I am surprised how few people have accepted this answer. This is a very good solution.
– CtheGood
Aug 18 '15 at 18:27
This is the best solution.
– Nevin Madhukar K
May 8 '18 at 6:35
add a comment |
console.dir(object)
:
Displays an interactive listing of the properties of a specified JavaScript object. This listing lets you use disclosure triangles to examine the contents of child objects.
Note that the console.dir()
feature is non-standard. See MDN Web Docs
console.dir(object)
:
Displays an interactive listing of the properties of a specified JavaScript object. This listing lets you use disclosure triangles to examine the contents of child objects.
Note that the console.dir()
feature is non-standard. See MDN Web Docs
edited Mar 7 '18 at 3:32
Rob Bednark
10.3k125482
10.3k125482
answered Jun 3 '14 at 12:43
Pizzaiola GorgonzolaPizzaiola Gorgonzola
2,10411312
2,10411312
9
this is the best answer
– davidhq
May 30 '15 at 15:09
5
I am surprised how few people have accepted this answer. This is a very good solution.
– CtheGood
Aug 18 '15 at 18:27
This is the best solution.
– Nevin Madhukar K
May 8 '18 at 6:35
add a comment |
9
this is the best answer
– davidhq
May 30 '15 at 15:09
5
I am surprised how few people have accepted this answer. This is a very good solution.
– CtheGood
Aug 18 '15 at 18:27
This is the best solution.
– Nevin Madhukar K
May 8 '18 at 6:35
9
9
this is the best answer
– davidhq
May 30 '15 at 15:09
this is the best answer
– davidhq
May 30 '15 at 15:09
5
5
I am surprised how few people have accepted this answer. This is a very good solution.
– CtheGood
Aug 18 '15 at 18:27
I am surprised how few people have accepted this answer. This is a very good solution.
– CtheGood
Aug 18 '15 at 18:27
This is the best solution.
– Nevin Madhukar K
May 8 '18 at 6:35
This is the best solution.
– Nevin Madhukar K
May 8 '18 at 6:35
add a comment |
try this :
console.log(JSON.stringify(obj))
This will print the stringify version of object. So instead of [object]
as an output you will get the content of object.
4
typeerror: Converting circular structure to JSON
?
– Kaiden Prince
Oct 18 '15 at 23:37
@KaidenPrince see this answer for your error: stackoverflow.com/questions/4816099/… It is likely a DOM element in your object. If that's the case, you're best attempting to just log to the console in chrome or firefox and inspect there. Otherwise you'd have to strip out all circular elements before the JSON.stringify is called in order for it to work.
– Ace Hyzer
Oct 28 '15 at 20:55
Solution is to simply split into 2 separate commands believe it or not: console.log("id:"); console.log(obj);
– Collin Chaffin
Mar 28 '17 at 21:57
Why downvote?, please explain reason for downvote.
– Abhishek Goel
May 13 '17 at 8:40
add a comment |
try this :
console.log(JSON.stringify(obj))
This will print the stringify version of object. So instead of [object]
as an output you will get the content of object.
4
typeerror: Converting circular structure to JSON
?
– Kaiden Prince
Oct 18 '15 at 23:37
@KaidenPrince see this answer for your error: stackoverflow.com/questions/4816099/… It is likely a DOM element in your object. If that's the case, you're best attempting to just log to the console in chrome or firefox and inspect there. Otherwise you'd have to strip out all circular elements before the JSON.stringify is called in order for it to work.
– Ace Hyzer
Oct 28 '15 at 20:55
Solution is to simply split into 2 separate commands believe it or not: console.log("id:"); console.log(obj);
– Collin Chaffin
Mar 28 '17 at 21:57
Why downvote?, please explain reason for downvote.
– Abhishek Goel
May 13 '17 at 8:40
add a comment |
try this :
console.log(JSON.stringify(obj))
This will print the stringify version of object. So instead of [object]
as an output you will get the content of object.
try this :
console.log(JSON.stringify(obj))
This will print the stringify version of object. So instead of [object]
as an output you will get the content of object.
edited Aug 12 '15 at 8:33
answered Aug 12 '15 at 7:53
Abhishek GoelAbhishek Goel
10.4k66857
10.4k66857
4
typeerror: Converting circular structure to JSON
?
– Kaiden Prince
Oct 18 '15 at 23:37
@KaidenPrince see this answer for your error: stackoverflow.com/questions/4816099/… It is likely a DOM element in your object. If that's the case, you're best attempting to just log to the console in chrome or firefox and inspect there. Otherwise you'd have to strip out all circular elements before the JSON.stringify is called in order for it to work.
– Ace Hyzer
Oct 28 '15 at 20:55
Solution is to simply split into 2 separate commands believe it or not: console.log("id:"); console.log(obj);
– Collin Chaffin
Mar 28 '17 at 21:57
Why downvote?, please explain reason for downvote.
– Abhishek Goel
May 13 '17 at 8:40
add a comment |
4
typeerror: Converting circular structure to JSON
?
– Kaiden Prince
Oct 18 '15 at 23:37
@KaidenPrince see this answer for your error: stackoverflow.com/questions/4816099/… It is likely a DOM element in your object. If that's the case, you're best attempting to just log to the console in chrome or firefox and inspect there. Otherwise you'd have to strip out all circular elements before the JSON.stringify is called in order for it to work.
– Ace Hyzer
Oct 28 '15 at 20:55
Solution is to simply split into 2 separate commands believe it or not: console.log("id:"); console.log(obj);
– Collin Chaffin
Mar 28 '17 at 21:57
Why downvote?, please explain reason for downvote.
– Abhishek Goel
May 13 '17 at 8:40
4
4
typeerror: Converting circular structure to JSON
?– Kaiden Prince
Oct 18 '15 at 23:37
typeerror: Converting circular structure to JSON
?– Kaiden Prince
Oct 18 '15 at 23:37
@KaidenPrince see this answer for your error: stackoverflow.com/questions/4816099/… It is likely a DOM element in your object. If that's the case, you're best attempting to just log to the console in chrome or firefox and inspect there. Otherwise you'd have to strip out all circular elements before the JSON.stringify is called in order for it to work.
– Ace Hyzer
Oct 28 '15 at 20:55
@KaidenPrince see this answer for your error: stackoverflow.com/questions/4816099/… It is likely a DOM element in your object. If that's the case, you're best attempting to just log to the console in chrome or firefox and inspect there. Otherwise you'd have to strip out all circular elements before the JSON.stringify is called in order for it to work.
– Ace Hyzer
Oct 28 '15 at 20:55
Solution is to simply split into 2 separate commands believe it or not: console.log("id:"); console.log(obj);
– Collin Chaffin
Mar 28 '17 at 21:57
Solution is to simply split into 2 separate commands believe it or not: console.log("id:"); console.log(obj);
– Collin Chaffin
Mar 28 '17 at 21:57
Why downvote?, please explain reason for downvote.
– Abhishek Goel
May 13 '17 at 8:40
Why downvote?, please explain reason for downvote.
– Abhishek Goel
May 13 '17 at 8:40
add a comment |
Well, Firefox (thanks to @Bojangles for detailed information) has Object.toSource()
method which prints objects as JSON and function(){}
.
That's enough for most debugging purposes, I guess.
5
Object.toSource() doesn't seem to work for Chrome, is this expected? Or does Chrome not fall under "advanced browsers"? =)
– tstyle
Feb 13 '11 at 12:10
Obviously it doesn't :(
– alamar
Feb 24 '11 at 13:32
40
Old thread, just found it through Google..toSource()
is actually Firefox only. Just thought I'd let you know.
– Bojangles
Aug 26 '11 at 12:14
too bad, I have Chrome and it doesnt work
– Nulik
Jan 5 '18 at 22:54
add a comment |
Well, Firefox (thanks to @Bojangles for detailed information) has Object.toSource()
method which prints objects as JSON and function(){}
.
That's enough for most debugging purposes, I guess.
5
Object.toSource() doesn't seem to work for Chrome, is this expected? Or does Chrome not fall under "advanced browsers"? =)
– tstyle
Feb 13 '11 at 12:10
Obviously it doesn't :(
– alamar
Feb 24 '11 at 13:32
40
Old thread, just found it through Google..toSource()
is actually Firefox only. Just thought I'd let you know.
– Bojangles
Aug 26 '11 at 12:14
too bad, I have Chrome and it doesnt work
– Nulik
Jan 5 '18 at 22:54
add a comment |
Well, Firefox (thanks to @Bojangles for detailed information) has Object.toSource()
method which prints objects as JSON and function(){}
.
That's enough for most debugging purposes, I guess.
Well, Firefox (thanks to @Bojangles for detailed information) has Object.toSource()
method which prints objects as JSON and function(){}
.
That's enough for most debugging purposes, I guess.
edited Jul 10 '14 at 9:18
rink.attendant.6
16.8k1763110
16.8k1763110
answered Jun 5 '09 at 19:04
alamaralamar
10.8k24974
10.8k24974
5
Object.toSource() doesn't seem to work for Chrome, is this expected? Or does Chrome not fall under "advanced browsers"? =)
– tstyle
Feb 13 '11 at 12:10
Obviously it doesn't :(
– alamar
Feb 24 '11 at 13:32
40
Old thread, just found it through Google..toSource()
is actually Firefox only. Just thought I'd let you know.
– Bojangles
Aug 26 '11 at 12:14
too bad, I have Chrome and it doesnt work
– Nulik
Jan 5 '18 at 22:54
add a comment |
5
Object.toSource() doesn't seem to work for Chrome, is this expected? Or does Chrome not fall under "advanced browsers"? =)
– tstyle
Feb 13 '11 at 12:10
Obviously it doesn't :(
– alamar
Feb 24 '11 at 13:32
40
Old thread, just found it through Google..toSource()
is actually Firefox only. Just thought I'd let you know.
– Bojangles
Aug 26 '11 at 12:14
too bad, I have Chrome and it doesnt work
– Nulik
Jan 5 '18 at 22:54
5
5
Object.toSource() doesn't seem to work for Chrome, is this expected? Or does Chrome not fall under "advanced browsers"? =)
– tstyle
Feb 13 '11 at 12:10
Object.toSource() doesn't seem to work for Chrome, is this expected? Or does Chrome not fall under "advanced browsers"? =)
– tstyle
Feb 13 '11 at 12:10
Obviously it doesn't :(
– alamar
Feb 24 '11 at 13:32
Obviously it doesn't :(
– alamar
Feb 24 '11 at 13:32
40
40
Old thread, just found it through Google.
.toSource()
is actually Firefox only. Just thought I'd let you know.– Bojangles
Aug 26 '11 at 12:14
Old thread, just found it through Google.
.toSource()
is actually Firefox only. Just thought I'd let you know.– Bojangles
Aug 26 '11 at 12:14
too bad, I have Chrome and it doesnt work
– Nulik
Jan 5 '18 at 22:54
too bad, I have Chrome and it doesnt work
– Nulik
Jan 5 '18 at 22:54
add a comment |
If you want to use alert, to print your object, you can do this:
alert("myObject is " + myObject.toSource());
It should print each property and its corresponding value in string format.
14
toSource() doesn't work in non-gecko browsers (e.g. Chrome, Safari)
– Yarin
Mar 7 '11 at 18:59
5
However this works fine for Firefox (Gecko) Browsers COOL !!!!
– Vinothkumar Arputharaj
Jul 5 '11 at 13:18
add a comment |
If you want to use alert, to print your object, you can do this:
alert("myObject is " + myObject.toSource());
It should print each property and its corresponding value in string format.
14
toSource() doesn't work in non-gecko browsers (e.g. Chrome, Safari)
– Yarin
Mar 7 '11 at 18:59
5
However this works fine for Firefox (Gecko) Browsers COOL !!!!
– Vinothkumar Arputharaj
Jul 5 '11 at 13:18
add a comment |
If you want to use alert, to print your object, you can do this:
alert("myObject is " + myObject.toSource());
It should print each property and its corresponding value in string format.
If you want to use alert, to print your object, you can do this:
alert("myObject is " + myObject.toSource());
It should print each property and its corresponding value in string format.
answered Sep 9 '10 at 7:15
GarryGarry
53942
53942
14
toSource() doesn't work in non-gecko browsers (e.g. Chrome, Safari)
– Yarin
Mar 7 '11 at 18:59
5
However this works fine for Firefox (Gecko) Browsers COOL !!!!
– Vinothkumar Arputharaj
Jul 5 '11 at 13:18
add a comment |
14
toSource() doesn't work in non-gecko browsers (e.g. Chrome, Safari)
– Yarin
Mar 7 '11 at 18:59
5
However this works fine for Firefox (Gecko) Browsers COOL !!!!
– Vinothkumar Arputharaj
Jul 5 '11 at 13:18
14
14
toSource() doesn't work in non-gecko browsers (e.g. Chrome, Safari)
– Yarin
Mar 7 '11 at 18:59
toSource() doesn't work in non-gecko browsers (e.g. Chrome, Safari)
– Yarin
Mar 7 '11 at 18:59
5
5
However this works fine for Firefox (Gecko) Browsers COOL !!!!
– Vinothkumar Arputharaj
Jul 5 '11 at 13:18
However this works fine for Firefox (Gecko) Browsers COOL !!!!
– Vinothkumar Arputharaj
Jul 5 '11 at 13:18
add a comment |
In NodeJS you can print an object by using util.inspect(obj)
. Be sure to state the depth or you'll only have a shallow print of the object.
add a comment |
In NodeJS you can print an object by using util.inspect(obj)
. Be sure to state the depth or you'll only have a shallow print of the object.
add a comment |
In NodeJS you can print an object by using util.inspect(obj)
. Be sure to state the depth or you'll only have a shallow print of the object.
In NodeJS you can print an object by using util.inspect(obj)
. Be sure to state the depth or you'll only have a shallow print of the object.
edited Apr 10 '18 at 22:49
Aliaksandr Sushkevich
2,47641428
2,47641428
answered Jul 15 '13 at 6:35
LanderLander
996615
996615
add a comment |
add a comment |
Function:
var print = function(o){
var str='';
for(var p in o){
if(typeof o[p] == 'string'){
str+= p + ': ' + o[p]+'; </br>';
}else{
str+= p + ': { </br>' + print(o[p]) + '}';
}
}
return str;
}
Usage:
var myObject = {
name: 'Wilson Page',
contact: {
email: 'wilson@hotmail.com',
tel: '123456789'
}
}
$('body').append( print(myObject) );
Example:
http://jsfiddle.net/WilsonPage/6eqMn/
Print method call the browser to print the page to pdf :p
– Marwen Trabelsi
May 31 '15 at 22:42
doesn't seem to work for integers
– jsh
Sep 25 '15 at 19:58
@jsh you should turn the if-else around and check for object instead of only string. updated fiddle: jsfiddle.net/6eqMn/594
– Michael Walter
Feb 15 '16 at 16:01
@wilsonpage This is failing if I add integer value to tel property :(
– ni3
Aug 23 '17 at 9:20
add a comment |
Function:
var print = function(o){
var str='';
for(var p in o){
if(typeof o[p] == 'string'){
str+= p + ': ' + o[p]+'; </br>';
}else{
str+= p + ': { </br>' + print(o[p]) + '}';
}
}
return str;
}
Usage:
var myObject = {
name: 'Wilson Page',
contact: {
email: 'wilson@hotmail.com',
tel: '123456789'
}
}
$('body').append( print(myObject) );
Example:
http://jsfiddle.net/WilsonPage/6eqMn/
Print method call the browser to print the page to pdf :p
– Marwen Trabelsi
May 31 '15 at 22:42
doesn't seem to work for integers
– jsh
Sep 25 '15 at 19:58
@jsh you should turn the if-else around and check for object instead of only string. updated fiddle: jsfiddle.net/6eqMn/594
– Michael Walter
Feb 15 '16 at 16:01
@wilsonpage This is failing if I add integer value to tel property :(
– ni3
Aug 23 '17 at 9:20
add a comment |
Function:
var print = function(o){
var str='';
for(var p in o){
if(typeof o[p] == 'string'){
str+= p + ': ' + o[p]+'; </br>';
}else{
str+= p + ': { </br>' + print(o[p]) + '}';
}
}
return str;
}
Usage:
var myObject = {
name: 'Wilson Page',
contact: {
email: 'wilson@hotmail.com',
tel: '123456789'
}
}
$('body').append( print(myObject) );
Example:
http://jsfiddle.net/WilsonPage/6eqMn/
Function:
var print = function(o){
var str='';
for(var p in o){
if(typeof o[p] == 'string'){
str+= p + ': ' + o[p]+'; </br>';
}else{
str+= p + ': { </br>' + print(o[p]) + '}';
}
}
return str;
}
Usage:
var myObject = {
name: 'Wilson Page',
contact: {
email: 'wilson@hotmail.com',
tel: '123456789'
}
}
$('body').append( print(myObject) );
Example:
http://jsfiddle.net/WilsonPage/6eqMn/
answered Nov 16 '11 at 14:37
wilsonpagewilsonpage
9,5111691139
9,5111691139
Print method call the browser to print the page to pdf :p
– Marwen Trabelsi
May 31 '15 at 22:42
doesn't seem to work for integers
– jsh
Sep 25 '15 at 19:58
@jsh you should turn the if-else around and check for object instead of only string. updated fiddle: jsfiddle.net/6eqMn/594
– Michael Walter
Feb 15 '16 at 16:01
@wilsonpage This is failing if I add integer value to tel property :(
– ni3
Aug 23 '17 at 9:20
add a comment |
Print method call the browser to print the page to pdf :p
– Marwen Trabelsi
May 31 '15 at 22:42
doesn't seem to work for integers
– jsh
Sep 25 '15 at 19:58
@jsh you should turn the if-else around and check for object instead of only string. updated fiddle: jsfiddle.net/6eqMn/594
– Michael Walter
Feb 15 '16 at 16:01
@wilsonpage This is failing if I add integer value to tel property :(
– ni3
Aug 23 '17 at 9:20
Print method call the browser to print the page to pdf :p
– Marwen Trabelsi
May 31 '15 at 22:42
Print method call the browser to print the page to pdf :p
– Marwen Trabelsi
May 31 '15 at 22:42
doesn't seem to work for integers
– jsh
Sep 25 '15 at 19:58
doesn't seem to work for integers
– jsh
Sep 25 '15 at 19:58
@jsh you should turn the if-else around and check for object instead of only string. updated fiddle: jsfiddle.net/6eqMn/594
– Michael Walter
Feb 15 '16 at 16:01
@jsh you should turn the if-else around and check for object instead of only string. updated fiddle: jsfiddle.net/6eqMn/594
– Michael Walter
Feb 15 '16 at 16:01
@wilsonpage This is failing if I add integer value to tel property :(
– ni3
Aug 23 '17 at 9:20
@wilsonpage This is failing if I add integer value to tel property :(
– ni3
Aug 23 '17 at 9:20
add a comment |
If you would like to see data in tabular format you can use
console.table(obj);
Table can be sorted if you click on the table column.
You can also select what columns to show:
console.table(obj, ['firstName', 'lastName']);
You can find more information about console.table here
add a comment |
If you would like to see data in tabular format you can use
console.table(obj);
Table can be sorted if you click on the table column.
You can also select what columns to show:
console.table(obj, ['firstName', 'lastName']);
You can find more information about console.table here
add a comment |
If you would like to see data in tabular format you can use
console.table(obj);
Table can be sorted if you click on the table column.
You can also select what columns to show:
console.table(obj, ['firstName', 'lastName']);
You can find more information about console.table here
If you would like to see data in tabular format you can use
console.table(obj);
Table can be sorted if you click on the table column.
You can also select what columns to show:
console.table(obj, ['firstName', 'lastName']);
You can find more information about console.table here
answered Mar 26 '15 at 12:43
Vlad BezdenVlad Bezden
28.6k10125113
28.6k10125113
add a comment |
add a comment |
As it was said before best and most simply way i found was
var getPrintObject=function(object)
{
return JSON.stringify(object);
}
This is the easiest and fastest solution, however it doesn't work on big objects such asnavigator
.
– someguy234
Dec 4 '14 at 0:30
add a comment |
As it was said before best and most simply way i found was
var getPrintObject=function(object)
{
return JSON.stringify(object);
}
This is the easiest and fastest solution, however it doesn't work on big objects such asnavigator
.
– someguy234
Dec 4 '14 at 0:30
add a comment |
As it was said before best and most simply way i found was
var getPrintObject=function(object)
{
return JSON.stringify(object);
}
As it was said before best and most simply way i found was
var getPrintObject=function(object)
{
return JSON.stringify(object);
}
answered Oct 8 '14 at 13:57
yoniayonia
1,246911
1,246911
This is the easiest and fastest solution, however it doesn't work on big objects such asnavigator
.
– someguy234
Dec 4 '14 at 0:30
add a comment |
This is the easiest and fastest solution, however it doesn't work on big objects such asnavigator
.
– someguy234
Dec 4 '14 at 0:30
This is the easiest and fastest solution, however it doesn't work on big objects such as
navigator
.– someguy234
Dec 4 '14 at 0:30
This is the easiest and fastest solution, however it doesn't work on big objects such as
navigator
.– someguy234
Dec 4 '14 at 0:30
add a comment |
Use this:
console.log('print object: ' + JSON.stringify(session));
add a comment |
Use this:
console.log('print object: ' + JSON.stringify(session));
add a comment |
Use this:
console.log('print object: ' + JSON.stringify(session));
Use this:
console.log('print object: ' + JSON.stringify(session));
answered Jul 15 '13 at 4:00
Walter CarazaWalter Caraza
6621918
6621918
add a comment |
add a comment |
To print the full object with Node.js with colors as a bonus:
console.dir(object, {depth: null, colors: true})
Colors are of course optional, 'depth: null' will print the full object.
The options don't seem to be supported in browsers.
References:
https://developer.mozilla.org/en-US/docs/Web/API/Console/dir
https://nodejs.org/api/console.html#console_console_dir_obj_options
waaaah life saver :)
– Deunz
Feb 20 '18 at 11:36
add a comment |
To print the full object with Node.js with colors as a bonus:
console.dir(object, {depth: null, colors: true})
Colors are of course optional, 'depth: null' will print the full object.
The options don't seem to be supported in browsers.
References:
https://developer.mozilla.org/en-US/docs/Web/API/Console/dir
https://nodejs.org/api/console.html#console_console_dir_obj_options
waaaah life saver :)
– Deunz
Feb 20 '18 at 11:36
add a comment |
To print the full object with Node.js with colors as a bonus:
console.dir(object, {depth: null, colors: true})
Colors are of course optional, 'depth: null' will print the full object.
The options don't seem to be supported in browsers.
References:
https://developer.mozilla.org/en-US/docs/Web/API/Console/dir
https://nodejs.org/api/console.html#console_console_dir_obj_options
To print the full object with Node.js with colors as a bonus:
console.dir(object, {depth: null, colors: true})
Colors are of course optional, 'depth: null' will print the full object.
The options don't seem to be supported in browsers.
References:
https://developer.mozilla.org/en-US/docs/Web/API/Console/dir
https://nodejs.org/api/console.html#console_console_dir_obj_options
answered Jun 14 '17 at 17:22
jpoppejpoppe
1,3471722
1,3471722
waaaah life saver :)
– Deunz
Feb 20 '18 at 11:36
add a comment |
waaaah life saver :)
– Deunz
Feb 20 '18 at 11:36
waaaah life saver :)
– Deunz
Feb 20 '18 at 11:36
waaaah life saver :)
– Deunz
Feb 20 '18 at 11:36
add a comment |
If you would like to print the object of its full length, can use
console.log(require('util').inspect(obj, {showHidden: false, depth: null})
If you want to print the object by converting it to the string then
console.log(JSON.stringify(obj));
JSON.stringify
works for me.
– AMIC MING
Jul 17 '17 at 19:07
you would need to add theJSON.stringify
when you try to concatenate with a string object. If you useconsole.log(object)
, it should pretty print the contents of the object
– Satadru Biswas
Aug 1 '17 at 22:36
add a comment |
If you would like to print the object of its full length, can use
console.log(require('util').inspect(obj, {showHidden: false, depth: null})
If you want to print the object by converting it to the string then
console.log(JSON.stringify(obj));
JSON.stringify
works for me.
– AMIC MING
Jul 17 '17 at 19:07
you would need to add theJSON.stringify
when you try to concatenate with a string object. If you useconsole.log(object)
, it should pretty print the contents of the object
– Satadru Biswas
Aug 1 '17 at 22:36
add a comment |
If you would like to print the object of its full length, can use
console.log(require('util').inspect(obj, {showHidden: false, depth: null})
If you want to print the object by converting it to the string then
console.log(JSON.stringify(obj));
If you would like to print the object of its full length, can use
console.log(require('util').inspect(obj, {showHidden: false, depth: null})
If you want to print the object by converting it to the string then
console.log(JSON.stringify(obj));
edited Apr 17 '17 at 8:35
answered Apr 17 '17 at 8:29
sreepurnasreepurna
1,058522
1,058522
JSON.stringify
works for me.
– AMIC MING
Jul 17 '17 at 19:07
you would need to add theJSON.stringify
when you try to concatenate with a string object. If you useconsole.log(object)
, it should pretty print the contents of the object
– Satadru Biswas
Aug 1 '17 at 22:36
add a comment |
JSON.stringify
works for me.
– AMIC MING
Jul 17 '17 at 19:07
you would need to add theJSON.stringify
when you try to concatenate with a string object. If you useconsole.log(object)
, it should pretty print the contents of the object
– Satadru Biswas
Aug 1 '17 at 22:36
JSON.stringify
works for me.– AMIC MING
Jul 17 '17 at 19:07
JSON.stringify
works for me.– AMIC MING
Jul 17 '17 at 19:07
you would need to add the
JSON.stringify
when you try to concatenate with a string object. If you use console.log(object)
, it should pretty print the contents of the object– Satadru Biswas
Aug 1 '17 at 22:36
you would need to add the
JSON.stringify
when you try to concatenate with a string object. If you use console.log(object)
, it should pretty print the contents of the object– Satadru Biswas
Aug 1 '17 at 22:36
add a comment |
I needed a way to recursively print the object, which pagewil's answer provided (Thanks!). I updated it a little bit to include a way to print up to a certain level, and to add spacing so that it is properly indented based on the current level that we are in so that it is more readable.
// Recursive print of object
var print = function( o, maxLevel, level ) {
if ( typeof level == "undefined" ) {
level = 0;
}
if ( typeof level == "undefined" ) {
maxLevel = 0;
}
var str = '';
// Remove this if you don't want the pre tag, but make sure to remove
// the close pre tag on the bottom as well
if ( level == 0 ) {
str = '<pre>';
}
var levelStr = '';
for ( var x = 0; x < level; x++ ) {
levelStr += ' ';
}
if ( maxLevel != 0 && level >= maxLevel ) {
str += levelStr + '...</br>';
return str;
}
for ( var p in o ) {
if ( typeof o[p] == 'string' ) {
str += levelStr +
p + ': ' + o[p] + ' </br>';
} else {
str += levelStr +
p + ': { </br>' + print( o[p], maxLevel, level + 1 ) + levelStr + '}</br>';
}
}
// Remove this if you don't want the pre tag, but make sure to remove
// the open pre tag on the top as well
if ( level == 0 ) {
str += '</pre>';
}
return str;
};
Usage:
var pagewilsObject = {
name: 'Wilson Page',
contact: {
email: 'wilson@hotmail.com',
tel: '123456789'
}
}
// Recursive of whole object
$('body').append( print(pagewilsObject) );
// Recursive of myObject up to 1 level, will only show name
// and that there is a contact object
$('body').append( print(pagewilsObject, 1) );
add a comment |
I needed a way to recursively print the object, which pagewil's answer provided (Thanks!). I updated it a little bit to include a way to print up to a certain level, and to add spacing so that it is properly indented based on the current level that we are in so that it is more readable.
// Recursive print of object
var print = function( o, maxLevel, level ) {
if ( typeof level == "undefined" ) {
level = 0;
}
if ( typeof level == "undefined" ) {
maxLevel = 0;
}
var str = '';
// Remove this if you don't want the pre tag, but make sure to remove
// the close pre tag on the bottom as well
if ( level == 0 ) {
str = '<pre>';
}
var levelStr = '';
for ( var x = 0; x < level; x++ ) {
levelStr += ' ';
}
if ( maxLevel != 0 && level >= maxLevel ) {
str += levelStr + '...</br>';
return str;
}
for ( var p in o ) {
if ( typeof o[p] == 'string' ) {
str += levelStr +
p + ': ' + o[p] + ' </br>';
} else {
str += levelStr +
p + ': { </br>' + print( o[p], maxLevel, level + 1 ) + levelStr + '}</br>';
}
}
// Remove this if you don't want the pre tag, but make sure to remove
// the open pre tag on the top as well
if ( level == 0 ) {
str += '</pre>';
}
return str;
};
Usage:
var pagewilsObject = {
name: 'Wilson Page',
contact: {
email: 'wilson@hotmail.com',
tel: '123456789'
}
}
// Recursive of whole object
$('body').append( print(pagewilsObject) );
// Recursive of myObject up to 1 level, will only show name
// and that there is a contact object
$('body').append( print(pagewilsObject, 1) );
add a comment |
I needed a way to recursively print the object, which pagewil's answer provided (Thanks!). I updated it a little bit to include a way to print up to a certain level, and to add spacing so that it is properly indented based on the current level that we are in so that it is more readable.
// Recursive print of object
var print = function( o, maxLevel, level ) {
if ( typeof level == "undefined" ) {
level = 0;
}
if ( typeof level == "undefined" ) {
maxLevel = 0;
}
var str = '';
// Remove this if you don't want the pre tag, but make sure to remove
// the close pre tag on the bottom as well
if ( level == 0 ) {
str = '<pre>';
}
var levelStr = '';
for ( var x = 0; x < level; x++ ) {
levelStr += ' ';
}
if ( maxLevel != 0 && level >= maxLevel ) {
str += levelStr + '...</br>';
return str;
}
for ( var p in o ) {
if ( typeof o[p] == 'string' ) {
str += levelStr +
p + ': ' + o[p] + ' </br>';
} else {
str += levelStr +
p + ': { </br>' + print( o[p], maxLevel, level + 1 ) + levelStr + '}</br>';
}
}
// Remove this if you don't want the pre tag, but make sure to remove
// the open pre tag on the top as well
if ( level == 0 ) {
str += '</pre>';
}
return str;
};
Usage:
var pagewilsObject = {
name: 'Wilson Page',
contact: {
email: 'wilson@hotmail.com',
tel: '123456789'
}
}
// Recursive of whole object
$('body').append( print(pagewilsObject) );
// Recursive of myObject up to 1 level, will only show name
// and that there is a contact object
$('body').append( print(pagewilsObject, 1) );
I needed a way to recursively print the object, which pagewil's answer provided (Thanks!). I updated it a little bit to include a way to print up to a certain level, and to add spacing so that it is properly indented based on the current level that we are in so that it is more readable.
// Recursive print of object
var print = function( o, maxLevel, level ) {
if ( typeof level == "undefined" ) {
level = 0;
}
if ( typeof level == "undefined" ) {
maxLevel = 0;
}
var str = '';
// Remove this if you don't want the pre tag, but make sure to remove
// the close pre tag on the bottom as well
if ( level == 0 ) {
str = '<pre>';
}
var levelStr = '';
for ( var x = 0; x < level; x++ ) {
levelStr += ' ';
}
if ( maxLevel != 0 && level >= maxLevel ) {
str += levelStr + '...</br>';
return str;
}
for ( var p in o ) {
if ( typeof o[p] == 'string' ) {
str += levelStr +
p + ': ' + o[p] + ' </br>';
} else {
str += levelStr +
p + ': { </br>' + print( o[p], maxLevel, level + 1 ) + levelStr + '}</br>';
}
}
// Remove this if you don't want the pre tag, but make sure to remove
// the open pre tag on the top as well
if ( level == 0 ) {
str += '</pre>';
}
return str;
};
Usage:
var pagewilsObject = {
name: 'Wilson Page',
contact: {
email: 'wilson@hotmail.com',
tel: '123456789'
}
}
// Recursive of whole object
$('body').append( print(pagewilsObject) );
// Recursive of myObject up to 1 level, will only show name
// and that there is a contact object
$('body').append( print(pagewilsObject, 1) );
edited Nov 7 '12 at 23:36
mmaclaurin
7171917
7171917
answered Aug 8 '12 at 23:42
megaboss98megaboss98
721179
721179
add a comment |
add a comment |
(This has been added to my library at GitHub)
Reinventing the wheel here! None of these solutions worked for my situation. So, I quickly doctored up pagewil's answer. This one is not for printing to screen (via console, or textfield or whatever). It is, however, for data transport. This version seems to return a very similar result as toSource()
. I've not tried JSON.stringify
, but I assume this is about the same thing. The result of this function is a valid Javascript object declaration.
I wouldn't doubt if something like this was already on SO somewhere, but it was just shorter to make it than to spend a while searching past answers. And since this question was my top hit on google when I started searching about this; I figured putting it here might help others.
Anyhow, the result from this function will be a string representation of your object, even if your object has embedded objects and arrays, and even if those objects or arrays have even further embedded objects and arrays. (I heard you like to drink? So, I pimped your car with a cooler. And then, I pimped your cooler with a cooler. So, your cooler can drink, while your being cool.)
Arrays are stored with instead of
{}
and thus dont have key/value pairs, just values. Like regular arrays. Therefore, they get created like arrays do.
Also, all string (including key names) are quoted, this is not necessary unless those strings have special characters (like a space or a slash). But, I didn't feel like detecting this just to remove some quotes that would otherwise still work fine.
This resulting string can then be used with eval
or just dumping it into a var thru string manipulation. Thus, re-creating your object again, from text.
function ObjToSource(o){
if (!o) return 'null';
var k="",na=typeof(o.length)=="undefined"?1:0,str="";
for(var p in o){
if (na) k = "'"+p+ "':";
if (typeof o[p] == "string") str += k + "'" + o[p]+"',";
else if (typeof o[p] == "object") str += k + ObjToSource(o[p])+",";
else str += k + o[p] + ",";
}
if (na) return "{"+str.slice(0,-1)+"}";
else return "["+str.slice(0,-1)+"]";
}
Let me know if I messed it all up, works fine in my testing. Also, the only way I could think of to detect type array
was to check for the presence of length
. Because Javascript really stores arrays as objects, I cant actually check for type array
(there is no such type!). If anyone else knows a better way, I would love to hear it. Because, if your object also has a property named length
then this function will mistakenly treat it as an array.
EDIT: Added check for null valued objects. Thanks Brock Adams
EDIT: Below is the fixed function to be able to print infinitely recursive objects. This does not print the same as toSource
from FF because toSource
will print the infinite recursion one time, where as, this function will kill it immediately. This function runs slower than the one above, so I'm adding it here instead of editing the above function, as its only needed if you plan to pass objects that link back to themselves, somewhere.
const ObjToSource=(o)=> {
if (!o) return null;
let str="",na=0,k,p;
if (typeof(o) == "object") {
if (!ObjToSource.check) ObjToSource.check = new Array();
for (k=ObjToSource.check.length;na<k;na++) if (ObjToSource.check[na]==o) return '{}';
ObjToSource.check.push(o);
}
k="",na=typeof(o.length)=="undefined"?1:0;
for(p in o){
if (na) k = "'"+p+"':";
if (typeof o[p] == "string") str += k+"'"+o[p]+"',";
else if (typeof o[p] == "object") str += k+ObjToSource(o[p])+",";
else str += k+o[p]+",";
}
if (typeof(o) == "object") ObjToSource.check.pop();
if (na) return "{"+str.slice(0,-1)+"}";
else return "["+str.slice(0,-1)+"]";
}
Test:
var test1 = new Object();
test1.foo = 1;
test1.bar = 2;
var testobject = new Object();
testobject.run = 1;
testobject.fast = null;
testobject.loop = testobject;
testobject.dup = test1;
console.log(ObjToSource(testobject));
console.log(testobject.toSource());
Result:
{'run':1,'fast':null,'loop':{},'dup':{'foo':1,'bar':2}}
({run:1, fast:null, loop:{run:1, fast:null, loop:{}, dup:{foo:1, bar:2}}, dup:{foo:1, bar:2}})
NOTE: Trying to print document.body
is a terrible example. For one, FF just prints an empty object string when using toSource
. And when using the function above, FF crashes on SecurityError: The operation is insecure.
. And Chrome will crash on Uncaught RangeError: Maximum call stack size exceeded
. Clearly, document.body
was not meant to be converted to string. Because its either too large, or against security policy to access certain properties. Unless, I messed something up here, do tell!
Crash prone. TryObjToSource(document.body)
, for example.
– Brock Adams
Dec 28 '12 at 22:34
ok, I found the issue. I was not checking for null valued objects. That is fixed now. But, you still cant doObjToSource(document.body)
because of infinite recursion. Evendocument.body.toSource()
in FireFox returns an empty object.
– Pimp Trizkit
Dec 28 '12 at 23:35
@BrockAdams - There now its fixed for infinite recursion, howeverdocument.body
is still not printable. See NOTE.
– Pimp Trizkit
Dec 29 '12 at 1:57
document.body
was just a shortcut to pointing out some big problems. You've now fixed the worst of those and I already upvoted. (Although, I do believe that a different approach could handledocument.body
. Most of the answers here would not do well against it either.)
– Brock Adams
Dec 29 '12 at 2:17
Well, if you (or anyone else) got any ideas of how to get past the fact that such a large object will fill up the stack during recursion or bypass security restrictions. I would love to hear it. Thanks for the vote!
– Pimp Trizkit
Dec 29 '12 at 2:21
|
show 3 more comments
(This has been added to my library at GitHub)
Reinventing the wheel here! None of these solutions worked for my situation. So, I quickly doctored up pagewil's answer. This one is not for printing to screen (via console, or textfield or whatever). It is, however, for data transport. This version seems to return a very similar result as toSource()
. I've not tried JSON.stringify
, but I assume this is about the same thing. The result of this function is a valid Javascript object declaration.
I wouldn't doubt if something like this was already on SO somewhere, but it was just shorter to make it than to spend a while searching past answers. And since this question was my top hit on google when I started searching about this; I figured putting it here might help others.
Anyhow, the result from this function will be a string representation of your object, even if your object has embedded objects and arrays, and even if those objects or arrays have even further embedded objects and arrays. (I heard you like to drink? So, I pimped your car with a cooler. And then, I pimped your cooler with a cooler. So, your cooler can drink, while your being cool.)
Arrays are stored with instead of
{}
and thus dont have key/value pairs, just values. Like regular arrays. Therefore, they get created like arrays do.
Also, all string (including key names) are quoted, this is not necessary unless those strings have special characters (like a space or a slash). But, I didn't feel like detecting this just to remove some quotes that would otherwise still work fine.
This resulting string can then be used with eval
or just dumping it into a var thru string manipulation. Thus, re-creating your object again, from text.
function ObjToSource(o){
if (!o) return 'null';
var k="",na=typeof(o.length)=="undefined"?1:0,str="";
for(var p in o){
if (na) k = "'"+p+ "':";
if (typeof o[p] == "string") str += k + "'" + o[p]+"',";
else if (typeof o[p] == "object") str += k + ObjToSource(o[p])+",";
else str += k + o[p] + ",";
}
if (na) return "{"+str.slice(0,-1)+"}";
else return "["+str.slice(0,-1)+"]";
}
Let me know if I messed it all up, works fine in my testing. Also, the only way I could think of to detect type array
was to check for the presence of length
. Because Javascript really stores arrays as objects, I cant actually check for type array
(there is no such type!). If anyone else knows a better way, I would love to hear it. Because, if your object also has a property named length
then this function will mistakenly treat it as an array.
EDIT: Added check for null valued objects. Thanks Brock Adams
EDIT: Below is the fixed function to be able to print infinitely recursive objects. This does not print the same as toSource
from FF because toSource
will print the infinite recursion one time, where as, this function will kill it immediately. This function runs slower than the one above, so I'm adding it here instead of editing the above function, as its only needed if you plan to pass objects that link back to themselves, somewhere.
const ObjToSource=(o)=> {
if (!o) return null;
let str="",na=0,k,p;
if (typeof(o) == "object") {
if (!ObjToSource.check) ObjToSource.check = new Array();
for (k=ObjToSource.check.length;na<k;na++) if (ObjToSource.check[na]==o) return '{}';
ObjToSource.check.push(o);
}
k="",na=typeof(o.length)=="undefined"?1:0;
for(p in o){
if (na) k = "'"+p+"':";
if (typeof o[p] == "string") str += k+"'"+o[p]+"',";
else if (typeof o[p] == "object") str += k+ObjToSource(o[p])+",";
else str += k+o[p]+",";
}
if (typeof(o) == "object") ObjToSource.check.pop();
if (na) return "{"+str.slice(0,-1)+"}";
else return "["+str.slice(0,-1)+"]";
}
Test:
var test1 = new Object();
test1.foo = 1;
test1.bar = 2;
var testobject = new Object();
testobject.run = 1;
testobject.fast = null;
testobject.loop = testobject;
testobject.dup = test1;
console.log(ObjToSource(testobject));
console.log(testobject.toSource());
Result:
{'run':1,'fast':null,'loop':{},'dup':{'foo':1,'bar':2}}
({run:1, fast:null, loop:{run:1, fast:null, loop:{}, dup:{foo:1, bar:2}}, dup:{foo:1, bar:2}})
NOTE: Trying to print document.body
is a terrible example. For one, FF just prints an empty object string when using toSource
. And when using the function above, FF crashes on SecurityError: The operation is insecure.
. And Chrome will crash on Uncaught RangeError: Maximum call stack size exceeded
. Clearly, document.body
was not meant to be converted to string. Because its either too large, or against security policy to access certain properties. Unless, I messed something up here, do tell!
Crash prone. TryObjToSource(document.body)
, for example.
– Brock Adams
Dec 28 '12 at 22:34
ok, I found the issue. I was not checking for null valued objects. That is fixed now. But, you still cant doObjToSource(document.body)
because of infinite recursion. Evendocument.body.toSource()
in FireFox returns an empty object.
– Pimp Trizkit
Dec 28 '12 at 23:35
@BrockAdams - There now its fixed for infinite recursion, howeverdocument.body
is still not printable. See NOTE.
– Pimp Trizkit
Dec 29 '12 at 1:57
document.body
was just a shortcut to pointing out some big problems. You've now fixed the worst of those and I already upvoted. (Although, I do believe that a different approach could handledocument.body
. Most of the answers here would not do well against it either.)
– Brock Adams
Dec 29 '12 at 2:17
Well, if you (or anyone else) got any ideas of how to get past the fact that such a large object will fill up the stack during recursion or bypass security restrictions. I would love to hear it. Thanks for the vote!
– Pimp Trizkit
Dec 29 '12 at 2:21
|
show 3 more comments
(This has been added to my library at GitHub)
Reinventing the wheel here! None of these solutions worked for my situation. So, I quickly doctored up pagewil's answer. This one is not for printing to screen (via console, or textfield or whatever). It is, however, for data transport. This version seems to return a very similar result as toSource()
. I've not tried JSON.stringify
, but I assume this is about the same thing. The result of this function is a valid Javascript object declaration.
I wouldn't doubt if something like this was already on SO somewhere, but it was just shorter to make it than to spend a while searching past answers. And since this question was my top hit on google when I started searching about this; I figured putting it here might help others.
Anyhow, the result from this function will be a string representation of your object, even if your object has embedded objects and arrays, and even if those objects or arrays have even further embedded objects and arrays. (I heard you like to drink? So, I pimped your car with a cooler. And then, I pimped your cooler with a cooler. So, your cooler can drink, while your being cool.)
Arrays are stored with instead of
{}
and thus dont have key/value pairs, just values. Like regular arrays. Therefore, they get created like arrays do.
Also, all string (including key names) are quoted, this is not necessary unless those strings have special characters (like a space or a slash). But, I didn't feel like detecting this just to remove some quotes that would otherwise still work fine.
This resulting string can then be used with eval
or just dumping it into a var thru string manipulation. Thus, re-creating your object again, from text.
function ObjToSource(o){
if (!o) return 'null';
var k="",na=typeof(o.length)=="undefined"?1:0,str="";
for(var p in o){
if (na) k = "'"+p+ "':";
if (typeof o[p] == "string") str += k + "'" + o[p]+"',";
else if (typeof o[p] == "object") str += k + ObjToSource(o[p])+",";
else str += k + o[p] + ",";
}
if (na) return "{"+str.slice(0,-1)+"}";
else return "["+str.slice(0,-1)+"]";
}
Let me know if I messed it all up, works fine in my testing. Also, the only way I could think of to detect type array
was to check for the presence of length
. Because Javascript really stores arrays as objects, I cant actually check for type array
(there is no such type!). If anyone else knows a better way, I would love to hear it. Because, if your object also has a property named length
then this function will mistakenly treat it as an array.
EDIT: Added check for null valued objects. Thanks Brock Adams
EDIT: Below is the fixed function to be able to print infinitely recursive objects. This does not print the same as toSource
from FF because toSource
will print the infinite recursion one time, where as, this function will kill it immediately. This function runs slower than the one above, so I'm adding it here instead of editing the above function, as its only needed if you plan to pass objects that link back to themselves, somewhere.
const ObjToSource=(o)=> {
if (!o) return null;
let str="",na=0,k,p;
if (typeof(o) == "object") {
if (!ObjToSource.check) ObjToSource.check = new Array();
for (k=ObjToSource.check.length;na<k;na++) if (ObjToSource.check[na]==o) return '{}';
ObjToSource.check.push(o);
}
k="",na=typeof(o.length)=="undefined"?1:0;
for(p in o){
if (na) k = "'"+p+"':";
if (typeof o[p] == "string") str += k+"'"+o[p]+"',";
else if (typeof o[p] == "object") str += k+ObjToSource(o[p])+",";
else str += k+o[p]+",";
}
if (typeof(o) == "object") ObjToSource.check.pop();
if (na) return "{"+str.slice(0,-1)+"}";
else return "["+str.slice(0,-1)+"]";
}
Test:
var test1 = new Object();
test1.foo = 1;
test1.bar = 2;
var testobject = new Object();
testobject.run = 1;
testobject.fast = null;
testobject.loop = testobject;
testobject.dup = test1;
console.log(ObjToSource(testobject));
console.log(testobject.toSource());
Result:
{'run':1,'fast':null,'loop':{},'dup':{'foo':1,'bar':2}}
({run:1, fast:null, loop:{run:1, fast:null, loop:{}, dup:{foo:1, bar:2}}, dup:{foo:1, bar:2}})
NOTE: Trying to print document.body
is a terrible example. For one, FF just prints an empty object string when using toSource
. And when using the function above, FF crashes on SecurityError: The operation is insecure.
. And Chrome will crash on Uncaught RangeError: Maximum call stack size exceeded
. Clearly, document.body
was not meant to be converted to string. Because its either too large, or against security policy to access certain properties. Unless, I messed something up here, do tell!
(This has been added to my library at GitHub)
Reinventing the wheel here! None of these solutions worked for my situation. So, I quickly doctored up pagewil's answer. This one is not for printing to screen (via console, or textfield or whatever). It is, however, for data transport. This version seems to return a very similar result as toSource()
. I've not tried JSON.stringify
, but I assume this is about the same thing. The result of this function is a valid Javascript object declaration.
I wouldn't doubt if something like this was already on SO somewhere, but it was just shorter to make it than to spend a while searching past answers. And since this question was my top hit on google when I started searching about this; I figured putting it here might help others.
Anyhow, the result from this function will be a string representation of your object, even if your object has embedded objects and arrays, and even if those objects or arrays have even further embedded objects and arrays. (I heard you like to drink? So, I pimped your car with a cooler. And then, I pimped your cooler with a cooler. So, your cooler can drink, while your being cool.)
Arrays are stored with instead of
{}
and thus dont have key/value pairs, just values. Like regular arrays. Therefore, they get created like arrays do.
Also, all string (including key names) are quoted, this is not necessary unless those strings have special characters (like a space or a slash). But, I didn't feel like detecting this just to remove some quotes that would otherwise still work fine.
This resulting string can then be used with eval
or just dumping it into a var thru string manipulation. Thus, re-creating your object again, from text.
function ObjToSource(o){
if (!o) return 'null';
var k="",na=typeof(o.length)=="undefined"?1:0,str="";
for(var p in o){
if (na) k = "'"+p+ "':";
if (typeof o[p] == "string") str += k + "'" + o[p]+"',";
else if (typeof o[p] == "object") str += k + ObjToSource(o[p])+",";
else str += k + o[p] + ",";
}
if (na) return "{"+str.slice(0,-1)+"}";
else return "["+str.slice(0,-1)+"]";
}
Let me know if I messed it all up, works fine in my testing. Also, the only way I could think of to detect type array
was to check for the presence of length
. Because Javascript really stores arrays as objects, I cant actually check for type array
(there is no such type!). If anyone else knows a better way, I would love to hear it. Because, if your object also has a property named length
then this function will mistakenly treat it as an array.
EDIT: Added check for null valued objects. Thanks Brock Adams
EDIT: Below is the fixed function to be able to print infinitely recursive objects. This does not print the same as toSource
from FF because toSource
will print the infinite recursion one time, where as, this function will kill it immediately. This function runs slower than the one above, so I'm adding it here instead of editing the above function, as its only needed if you plan to pass objects that link back to themselves, somewhere.
const ObjToSource=(o)=> {
if (!o) return null;
let str="",na=0,k,p;
if (typeof(o) == "object") {
if (!ObjToSource.check) ObjToSource.check = new Array();
for (k=ObjToSource.check.length;na<k;na++) if (ObjToSource.check[na]==o) return '{}';
ObjToSource.check.push(o);
}
k="",na=typeof(o.length)=="undefined"?1:0;
for(p in o){
if (na) k = "'"+p+"':";
if (typeof o[p] == "string") str += k+"'"+o[p]+"',";
else if (typeof o[p] == "object") str += k+ObjToSource(o[p])+",";
else str += k+o[p]+",";
}
if (typeof(o) == "object") ObjToSource.check.pop();
if (na) return "{"+str.slice(0,-1)+"}";
else return "["+str.slice(0,-1)+"]";
}
Test:
var test1 = new Object();
test1.foo = 1;
test1.bar = 2;
var testobject = new Object();
testobject.run = 1;
testobject.fast = null;
testobject.loop = testobject;
testobject.dup = test1;
console.log(ObjToSource(testobject));
console.log(testobject.toSource());
Result:
{'run':1,'fast':null,'loop':{},'dup':{'foo':1,'bar':2}}
({run:1, fast:null, loop:{run:1, fast:null, loop:{}, dup:{foo:1, bar:2}}, dup:{foo:1, bar:2}})
NOTE: Trying to print document.body
is a terrible example. For one, FF just prints an empty object string when using toSource
. And when using the function above, FF crashes on SecurityError: The operation is insecure.
. And Chrome will crash on Uncaught RangeError: Maximum call stack size exceeded
. Clearly, document.body
was not meant to be converted to string. Because its either too large, or against security policy to access certain properties. Unless, I messed something up here, do tell!
edited Mar 23 '18 at 7:37
answered Dec 12 '12 at 14:36
Pimp TrizkitPimp Trizkit
11.3k51832
11.3k51832
Crash prone. TryObjToSource(document.body)
, for example.
– Brock Adams
Dec 28 '12 at 22:34
ok, I found the issue. I was not checking for null valued objects. That is fixed now. But, you still cant doObjToSource(document.body)
because of infinite recursion. Evendocument.body.toSource()
in FireFox returns an empty object.
– Pimp Trizkit
Dec 28 '12 at 23:35
@BrockAdams - There now its fixed for infinite recursion, howeverdocument.body
is still not printable. See NOTE.
– Pimp Trizkit
Dec 29 '12 at 1:57
document.body
was just a shortcut to pointing out some big problems. You've now fixed the worst of those and I already upvoted. (Although, I do believe that a different approach could handledocument.body
. Most of the answers here would not do well against it either.)
– Brock Adams
Dec 29 '12 at 2:17
Well, if you (or anyone else) got any ideas of how to get past the fact that such a large object will fill up the stack during recursion or bypass security restrictions. I would love to hear it. Thanks for the vote!
– Pimp Trizkit
Dec 29 '12 at 2:21
|
show 3 more comments
Crash prone. TryObjToSource(document.body)
, for example.
– Brock Adams
Dec 28 '12 at 22:34
ok, I found the issue. I was not checking for null valued objects. That is fixed now. But, you still cant doObjToSource(document.body)
because of infinite recursion. Evendocument.body.toSource()
in FireFox returns an empty object.
– Pimp Trizkit
Dec 28 '12 at 23:35
@BrockAdams - There now its fixed for infinite recursion, howeverdocument.body
is still not printable. See NOTE.
– Pimp Trizkit
Dec 29 '12 at 1:57
document.body
was just a shortcut to pointing out some big problems. You've now fixed the worst of those and I already upvoted. (Although, I do believe that a different approach could handledocument.body
. Most of the answers here would not do well against it either.)
– Brock Adams
Dec 29 '12 at 2:17
Well, if you (or anyone else) got any ideas of how to get past the fact that such a large object will fill up the stack during recursion or bypass security restrictions. I would love to hear it. Thanks for the vote!
– Pimp Trizkit
Dec 29 '12 at 2:21
Crash prone. Try
ObjToSource(document.body)
, for example.– Brock Adams
Dec 28 '12 at 22:34
Crash prone. Try
ObjToSource(document.body)
, for example.– Brock Adams
Dec 28 '12 at 22:34
ok, I found the issue. I was not checking for null valued objects. That is fixed now. But, you still cant do
ObjToSource(document.body)
because of infinite recursion. Even document.body.toSource()
in FireFox returns an empty object.– Pimp Trizkit
Dec 28 '12 at 23:35
ok, I found the issue. I was not checking for null valued objects. That is fixed now. But, you still cant do
ObjToSource(document.body)
because of infinite recursion. Even document.body.toSource()
in FireFox returns an empty object.– Pimp Trizkit
Dec 28 '12 at 23:35
@BrockAdams - There now its fixed for infinite recursion, however
document.body
is still not printable. See NOTE.– Pimp Trizkit
Dec 29 '12 at 1:57
@BrockAdams - There now its fixed for infinite recursion, however
document.body
is still not printable. See NOTE.– Pimp Trizkit
Dec 29 '12 at 1:57
document.body
was just a shortcut to pointing out some big problems. You've now fixed the worst of those and I already upvoted. (Although, I do believe that a different approach could handle document.body
. Most of the answers here would not do well against it either.)– Brock Adams
Dec 29 '12 at 2:17
document.body
was just a shortcut to pointing out some big problems. You've now fixed the worst of those and I already upvoted. (Although, I do believe that a different approach could handle document.body
. Most of the answers here would not do well against it either.)– Brock Adams
Dec 29 '12 at 2:17
Well, if you (or anyone else) got any ideas of how to get past the fact that such a large object will fill up the stack during recursion or bypass security restrictions. I would love to hear it. Thanks for the vote!
– Pimp Trizkit
Dec 29 '12 at 2:21
Well, if you (or anyone else) got any ideas of how to get past the fact that such a large object will fill up the stack during recursion or bypass security restrictions. I would love to hear it. Thanks for the vote!
– Pimp Trizkit
Dec 29 '12 at 2:21
|
show 3 more comments
I always use console.log("object will be: ", obj, obj1)
.
this way I don't need to do the workaround with stringify with JSON.
All the properties of the object will be expanded nicely.
add a comment |
I always use console.log("object will be: ", obj, obj1)
.
this way I don't need to do the workaround with stringify with JSON.
All the properties of the object will be expanded nicely.
add a comment |
I always use console.log("object will be: ", obj, obj1)
.
this way I don't need to do the workaround with stringify with JSON.
All the properties of the object will be expanded nicely.
I always use console.log("object will be: ", obj, obj1)
.
this way I don't need to do the workaround with stringify with JSON.
All the properties of the object will be expanded nicely.
answered Oct 20 '15 at 9:43
nils petersohnnils petersohn
1,21621522
1,21621522
add a comment |
add a comment |
The simplest way:
console.log(obj);
Or with a message:
console.log("object is: %O", obj);
The first object you pass can contain one or more format specifiers. A format specifier is composed of the percent sign (%) followed by a letter that indicates the formatting to apply.
More format specifiers
2
This is an excellent answer. I am surprised it was down-voted and not just edited. Anyway, I have now edited it. Help up-vote this answer.
– user664833
Jan 23 '18 at 1:58
Very nice! And with link to all otherconsole.xxx()
options! Thank you.
– not2qubit
Feb 26 '18 at 10:30
add a comment |
The simplest way:
console.log(obj);
Or with a message:
console.log("object is: %O", obj);
The first object you pass can contain one or more format specifiers. A format specifier is composed of the percent sign (%) followed by a letter that indicates the formatting to apply.
More format specifiers
2
This is an excellent answer. I am surprised it was down-voted and not just edited. Anyway, I have now edited it. Help up-vote this answer.
– user664833
Jan 23 '18 at 1:58
Very nice! And with link to all otherconsole.xxx()
options! Thank you.
– not2qubit
Feb 26 '18 at 10:30
add a comment |
The simplest way:
console.log(obj);
Or with a message:
console.log("object is: %O", obj);
The first object you pass can contain one or more format specifiers. A format specifier is composed of the percent sign (%) followed by a letter that indicates the formatting to apply.
More format specifiers
The simplest way:
console.log(obj);
Or with a message:
console.log("object is: %O", obj);
The first object you pass can contain one or more format specifiers. A format specifier is composed of the percent sign (%) followed by a letter that indicates the formatting to apply.
More format specifiers
edited Jan 24 '18 at 2:32
answered Jul 4 '16 at 4:56
3DRobert3DRobert
49157
49157
2
This is an excellent answer. I am surprised it was down-voted and not just edited. Anyway, I have now edited it. Help up-vote this answer.
– user664833
Jan 23 '18 at 1:58
Very nice! And with link to all otherconsole.xxx()
options! Thank you.
– not2qubit
Feb 26 '18 at 10:30
add a comment |
2
This is an excellent answer. I am surprised it was down-voted and not just edited. Anyway, I have now edited it. Help up-vote this answer.
– user664833
Jan 23 '18 at 1:58
Very nice! And with link to all otherconsole.xxx()
options! Thank you.
– not2qubit
Feb 26 '18 at 10:30
2
2
This is an excellent answer. I am surprised it was down-voted and not just edited. Anyway, I have now edited it. Help up-vote this answer.
– user664833
Jan 23 '18 at 1:58
This is an excellent answer. I am surprised it was down-voted and not just edited. Anyway, I have now edited it. Help up-vote this answer.
– user664833
Jan 23 '18 at 1:58
Very nice! And with link to all other
console.xxx()
options! Thank you.– not2qubit
Feb 26 '18 at 10:30
Very nice! And with link to all other
console.xxx()
options! Thank you.– not2qubit
Feb 26 '18 at 10:30
add a comment |
var list = function(object) {
for(var key in object) {
console.log(key);
}
}
where object
is your object
or you can use this in chrome dev tools, "console" tab:
console.log(object);
1
i don't understand this downvotes...
– user3632930
Mar 9 '15 at 15:43
I think your answer is incomplete. (not me that cause downvote) This, yet, only print the key..
– Abdillah
Apr 22 '15 at 9:13
1
thanks for your answer, it has inspired me to do this:console.log(Object.keys(object));
while I know that only prints the properties keys, it is enough to me for my purposes ;)
– Wilson
Aug 5 '15 at 15:17
add a comment |
var list = function(object) {
for(var key in object) {
console.log(key);
}
}
where object
is your object
or you can use this in chrome dev tools, "console" tab:
console.log(object);
1
i don't understand this downvotes...
– user3632930
Mar 9 '15 at 15:43
I think your answer is incomplete. (not me that cause downvote) This, yet, only print the key..
– Abdillah
Apr 22 '15 at 9:13
1
thanks for your answer, it has inspired me to do this:console.log(Object.keys(object));
while I know that only prints the properties keys, it is enough to me for my purposes ;)
– Wilson
Aug 5 '15 at 15:17
add a comment |
var list = function(object) {
for(var key in object) {
console.log(key);
}
}
where object
is your object
or you can use this in chrome dev tools, "console" tab:
console.log(object);
var list = function(object) {
for(var key in object) {
console.log(key);
}
}
where object
is your object
or you can use this in chrome dev tools, "console" tab:
console.log(object);
edited Mar 9 '15 at 15:45
answered Feb 5 '15 at 18:24
user3632930user3632930
28628
28628
1
i don't understand this downvotes...
– user3632930
Mar 9 '15 at 15:43
I think your answer is incomplete. (not me that cause downvote) This, yet, only print the key..
– Abdillah
Apr 22 '15 at 9:13
1
thanks for your answer, it has inspired me to do this:console.log(Object.keys(object));
while I know that only prints the properties keys, it is enough to me for my purposes ;)
– Wilson
Aug 5 '15 at 15:17
add a comment |
1
i don't understand this downvotes...
– user3632930
Mar 9 '15 at 15:43
I think your answer is incomplete. (not me that cause downvote) This, yet, only print the key..
– Abdillah
Apr 22 '15 at 9:13
1
thanks for your answer, it has inspired me to do this:console.log(Object.keys(object));
while I know that only prints the properties keys, it is enough to me for my purposes ;)
– Wilson
Aug 5 '15 at 15:17
1
1
i don't understand this downvotes...
– user3632930
Mar 9 '15 at 15:43
i don't understand this downvotes...
– user3632930
Mar 9 '15 at 15:43
I think your answer is incomplete. (not me that cause downvote) This, yet, only print the key..
– Abdillah
Apr 22 '15 at 9:13
I think your answer is incomplete. (not me that cause downvote) This, yet, only print the key..
– Abdillah
Apr 22 '15 at 9:13
1
1
thanks for your answer, it has inspired me to do this:
console.log(Object.keys(object));
while I know that only prints the properties keys, it is enough to me for my purposes ;)– Wilson
Aug 5 '15 at 15:17
thanks for your answer, it has inspired me to do this:
console.log(Object.keys(object));
while I know that only prints the properties keys, it is enough to me for my purposes ;)– Wilson
Aug 5 '15 at 15:17
add a comment |
Assume object obj = {0:'John', 1:'Foo', 2:'Bar'}
Print object's content
for (var i in obj){
console.log(obj[i], i);
}
Console output (Chrome DevTools) :
John 0
Foo 1
Bar 2
Hope that helps!
add a comment |
Assume object obj = {0:'John', 1:'Foo', 2:'Bar'}
Print object's content
for (var i in obj){
console.log(obj[i], i);
}
Console output (Chrome DevTools) :
John 0
Foo 1
Bar 2
Hope that helps!
add a comment |
Assume object obj = {0:'John', 1:'Foo', 2:'Bar'}
Print object's content
for (var i in obj){
console.log(obj[i], i);
}
Console output (Chrome DevTools) :
John 0
Foo 1
Bar 2
Hope that helps!
Assume object obj = {0:'John', 1:'Foo', 2:'Bar'}
Print object's content
for (var i in obj){
console.log(obj[i], i);
}
Console output (Chrome DevTools) :
John 0
Foo 1
Bar 2
Hope that helps!
answered Aug 2 '16 at 16:15
BishopBishop
2,28811524
2,28811524
add a comment |
add a comment |
Javascript Function
<script type="text/javascript">
function print_r(theObj){
if(theObj.constructor == Array || theObj.constructor == Object){
document.write("<ul>")
for(var p in theObj){
if(theObj[p].constructor == Array || theObj[p].constructor == Object){
document.write("<li>["+p+"] => "+typeof(theObj)+"</li>");
document.write("<ul>")
print_r(theObj[p]);
document.write("</ul>")
} else {
document.write("<li>["+p+"] => "+theObj[p]+"</li>");
}
}
document.write("</ul>")
}
}
</script>
Printing Object
<script type="text/javascript">
print_r(JAVACRIPT_ARRAY_OR_OBJECT);
</script>
via print_r in Javascript
I'm not sure if this is a bug in the js.do example I'm using, but this only seems to output the first full "branch" of the tree. ie it follows the first reference of the first reference... ad infinitum
– Jon Story
Feb 12 '15 at 12:47
add a comment |
Javascript Function
<script type="text/javascript">
function print_r(theObj){
if(theObj.constructor == Array || theObj.constructor == Object){
document.write("<ul>")
for(var p in theObj){
if(theObj[p].constructor == Array || theObj[p].constructor == Object){
document.write("<li>["+p+"] => "+typeof(theObj)+"</li>");
document.write("<ul>")
print_r(theObj[p]);
document.write("</ul>")
} else {
document.write("<li>["+p+"] => "+theObj[p]+"</li>");
}
}
document.write("</ul>")
}
}
</script>
Printing Object
<script type="text/javascript">
print_r(JAVACRIPT_ARRAY_OR_OBJECT);
</script>
via print_r in Javascript
I'm not sure if this is a bug in the js.do example I'm using, but this only seems to output the first full "branch" of the tree. ie it follows the first reference of the first reference... ad infinitum
– Jon Story
Feb 12 '15 at 12:47
add a comment |
Javascript Function
<script type="text/javascript">
function print_r(theObj){
if(theObj.constructor == Array || theObj.constructor == Object){
document.write("<ul>")
for(var p in theObj){
if(theObj[p].constructor == Array || theObj[p].constructor == Object){
document.write("<li>["+p+"] => "+typeof(theObj)+"</li>");
document.write("<ul>")
print_r(theObj[p]);
document.write("</ul>")
} else {
document.write("<li>["+p+"] => "+theObj[p]+"</li>");
}
}
document.write("</ul>")
}
}
</script>
Printing Object
<script type="text/javascript">
print_r(JAVACRIPT_ARRAY_OR_OBJECT);
</script>
via print_r in Javascript
Javascript Function
<script type="text/javascript">
function print_r(theObj){
if(theObj.constructor == Array || theObj.constructor == Object){
document.write("<ul>")
for(var p in theObj){
if(theObj[p].constructor == Array || theObj[p].constructor == Object){
document.write("<li>["+p+"] => "+typeof(theObj)+"</li>");
document.write("<ul>")
print_r(theObj[p]);
document.write("</ul>")
} else {
document.write("<li>["+p+"] => "+theObj[p]+"</li>");
}
}
document.write("</ul>")
}
}
</script>
Printing Object
<script type="text/javascript">
print_r(JAVACRIPT_ARRAY_OR_OBJECT);
</script>
via print_r in Javascript
answered Jan 21 '15 at 13:45
Mukesh ChapagainMukesh Chapagain
18k1088104
18k1088104
I'm not sure if this is a bug in the js.do example I'm using, but this only seems to output the first full "branch" of the tree. ie it follows the first reference of the first reference... ad infinitum
– Jon Story
Feb 12 '15 at 12:47
add a comment |
I'm not sure if this is a bug in the js.do example I'm using, but this only seems to output the first full "branch" of the tree. ie it follows the first reference of the first reference... ad infinitum
– Jon Story
Feb 12 '15 at 12:47
I'm not sure if this is a bug in the js.do example I'm using, but this only seems to output the first full "branch" of the tree. ie it follows the first reference of the first reference... ad infinitum
– Jon Story
Feb 12 '15 at 12:47
I'm not sure if this is a bug in the js.do example I'm using, but this only seems to output the first full "branch" of the tree. ie it follows the first reference of the first reference... ad infinitum
– Jon Story
Feb 12 '15 at 12:47
add a comment |
Another way of displaying objects within the console is with JSON.stringify
. Checkout the below example:
var gandalf = {
"real name": "Gandalf",
"age (est)": 11000,
"race": "Maia",
"haveRetirementPlan": true,
"aliases": [
"Greyhame",
"Stormcrow",
"Mithrandir",
"Gandalf the Grey",
"Gandalf the White"
]
};
//to console log object, we cannot use console.log("Object gandalf: " + gandalf);
console.log("Object gandalf: ");
//this will show object gandalf ONLY in Google Chrome NOT in IE
console.log(gandalf);
//this will show object gandalf IN ALL BROWSERS!
console.log(JSON.stringify(gandalf));
//this will show object gandalf IN ALL BROWSERS! with beautiful indent
console.log(JSON.stringify(gandalf, null, 4));
add a comment |
Another way of displaying objects within the console is with JSON.stringify
. Checkout the below example:
var gandalf = {
"real name": "Gandalf",
"age (est)": 11000,
"race": "Maia",
"haveRetirementPlan": true,
"aliases": [
"Greyhame",
"Stormcrow",
"Mithrandir",
"Gandalf the Grey",
"Gandalf the White"
]
};
//to console log object, we cannot use console.log("Object gandalf: " + gandalf);
console.log("Object gandalf: ");
//this will show object gandalf ONLY in Google Chrome NOT in IE
console.log(gandalf);
//this will show object gandalf IN ALL BROWSERS!
console.log(JSON.stringify(gandalf));
//this will show object gandalf IN ALL BROWSERS! with beautiful indent
console.log(JSON.stringify(gandalf, null, 4));
add a comment |
Another way of displaying objects within the console is with JSON.stringify
. Checkout the below example:
var gandalf = {
"real name": "Gandalf",
"age (est)": 11000,
"race": "Maia",
"haveRetirementPlan": true,
"aliases": [
"Greyhame",
"Stormcrow",
"Mithrandir",
"Gandalf the Grey",
"Gandalf the White"
]
};
//to console log object, we cannot use console.log("Object gandalf: " + gandalf);
console.log("Object gandalf: ");
//this will show object gandalf ONLY in Google Chrome NOT in IE
console.log(gandalf);
//this will show object gandalf IN ALL BROWSERS!
console.log(JSON.stringify(gandalf));
//this will show object gandalf IN ALL BROWSERS! with beautiful indent
console.log(JSON.stringify(gandalf, null, 4));
Another way of displaying objects within the console is with JSON.stringify
. Checkout the below example:
var gandalf = {
"real name": "Gandalf",
"age (est)": 11000,
"race": "Maia",
"haveRetirementPlan": true,
"aliases": [
"Greyhame",
"Stormcrow",
"Mithrandir",
"Gandalf the Grey",
"Gandalf the White"
]
};
//to console log object, we cannot use console.log("Object gandalf: " + gandalf);
console.log("Object gandalf: ");
//this will show object gandalf ONLY in Google Chrome NOT in IE
console.log(gandalf);
//this will show object gandalf IN ALL BROWSERS!
console.log(JSON.stringify(gandalf));
//this will show object gandalf IN ALL BROWSERS! with beautiful indent
console.log(JSON.stringify(gandalf, null, 4));
edited Jul 26 '18 at 13:51
Socrates
1,56872344
1,56872344
answered Jun 19 '18 at 17:33
Kean AmaralKean Amaral
19923
19923
add a comment |
add a comment |
A little helper function I always use in my projects for simple, speedy debugging via the console.
Inspiration taken from Laravel.
/**
* @param variable mixed The var to log to the console
* @param varName string Optional, will appear as a label before the var
*/
function dd(variable, varName) {
var varNameOutput;
varName = varName || '';
varNameOutput = varName ? varName + ':' : '';
console.warn(varNameOutput, variable, ' (' + (typeof variable) + ')');
}
Usage
dd(123.55);
outputs:
var obj = {field1: 'xyz', field2: 2016};
dd(obj, 'My Cool Obj');
1
+ for being inspired by Laravel
– Yevgeniy Afanasyev
Nov 23 '17 at 5:10
add a comment |
A little helper function I always use in my projects for simple, speedy debugging via the console.
Inspiration taken from Laravel.
/**
* @param variable mixed The var to log to the console
* @param varName string Optional, will appear as a label before the var
*/
function dd(variable, varName) {
var varNameOutput;
varName = varName || '';
varNameOutput = varName ? varName + ':' : '';
console.warn(varNameOutput, variable, ' (' + (typeof variable) + ')');
}
Usage
dd(123.55);
outputs:
var obj = {field1: 'xyz', field2: 2016};
dd(obj, 'My Cool Obj');
1
+ for being inspired by Laravel
– Yevgeniy Afanasyev
Nov 23 '17 at 5:10
add a comment |
A little helper function I always use in my projects for simple, speedy debugging via the console.
Inspiration taken from Laravel.
/**
* @param variable mixed The var to log to the console
* @param varName string Optional, will appear as a label before the var
*/
function dd(variable, varName) {
var varNameOutput;
varName = varName || '';
varNameOutput = varName ? varName + ':' : '';
console.warn(varNameOutput, variable, ' (' + (typeof variable) + ')');
}
Usage
dd(123.55);
outputs:
var obj = {field1: 'xyz', field2: 2016};
dd(obj, 'My Cool Obj');
A little helper function I always use in my projects for simple, speedy debugging via the console.
Inspiration taken from Laravel.
/**
* @param variable mixed The var to log to the console
* @param varName string Optional, will appear as a label before the var
*/
function dd(variable, varName) {
var varNameOutput;
varName = varName || '';
varNameOutput = varName ? varName + ':' : '';
console.warn(varNameOutput, variable, ' (' + (typeof variable) + ')');
}
Usage
dd(123.55);
outputs:
var obj = {field1: 'xyz', field2: 2016};
dd(obj, 'My Cool Obj');
answered Nov 8 '16 at 12:53
George KaganGeorge Kagan
3,41253548
3,41253548
1
+ for being inspired by Laravel
– Yevgeniy Afanasyev
Nov 23 '17 at 5:10
add a comment |
1
+ for being inspired by Laravel
– Yevgeniy Afanasyev
Nov 23 '17 at 5:10
1
1
+ for being inspired by Laravel
– Yevgeniy Afanasyev
Nov 23 '17 at 5:10
+ for being inspired by Laravel
– Yevgeniy Afanasyev
Nov 23 '17 at 5:10
add a comment |
Here's a way to do it:
console.log("%o", obj);
Interesting. Is there any more information on this?
– Luke
Jun 12 '18 at 4:56
In the context of Chrome-dev-tool, google did mentioned this in this link. referring to the section "String substitution and formatting"
– chaco
Jun 15 '18 at 9:30
I saw it in mdn docs.
– tryzniak
Jun 15 '18 at 12:35
add a comment |
Here's a way to do it:
console.log("%o", obj);
Interesting. Is there any more information on this?
– Luke
Jun 12 '18 at 4:56
In the context of Chrome-dev-tool, google did mentioned this in this link. referring to the section "String substitution and formatting"
– chaco
Jun 15 '18 at 9:30
I saw it in mdn docs.
– tryzniak
Jun 15 '18 at 12:35
add a comment |
Here's a way to do it:
console.log("%o", obj);
Here's a way to do it:
console.log("%o", obj);
answered May 31 '18 at 12:26
tryzniaktryzniak
41039
41039
Interesting. Is there any more information on this?
– Luke
Jun 12 '18 at 4:56
In the context of Chrome-dev-tool, google did mentioned this in this link. referring to the section "String substitution and formatting"
– chaco
Jun 15 '18 at 9:30
I saw it in mdn docs.
– tryzniak
Jun 15 '18 at 12:35
add a comment |
Interesting. Is there any more information on this?
– Luke
Jun 12 '18 at 4:56
In the context of Chrome-dev-tool, google did mentioned this in this link. referring to the section "String substitution and formatting"
– chaco
Jun 15 '18 at 9:30
I saw it in mdn docs.
– tryzniak
Jun 15 '18 at 12:35
Interesting. Is there any more information on this?
– Luke
Jun 12 '18 at 4:56
Interesting. Is there any more information on this?
– Luke
Jun 12 '18 at 4:56
In the context of Chrome-dev-tool, google did mentioned this in this link. referring to the section "String substitution and formatting"
– chaco
Jun 15 '18 at 9:30
In the context of Chrome-dev-tool, google did mentioned this in this link. referring to the section "String substitution and formatting"
– chaco
Jun 15 '18 at 9:30
I saw it in mdn docs.
– tryzniak
Jun 15 '18 at 12:35
I saw it in mdn docs.
– tryzniak
Jun 15 '18 at 12:35
add a comment |
i used pagewil's print method, and it worked very nicely.
here is my slightly extended version with (sloppy) indents and distinct prop/ob delimiters:
var print = function(obj, delp, delo, ind){
delp = delp!=null ? delp : "t"; // property delimeter
delo = delo!=null ? delo : "n"; // object delimeter
ind = ind!=null ? ind : " "; // indent; ind+ind geometric addition not great for deep objects
var str='';
for(var prop in obj){
if(typeof obj[prop] == 'string' || typeof obj[prop] == 'number'){
var q = typeof obj[prop] == 'string' ? "" : ""; // make this "'" to quote strings
str += ind + prop + ': ' + q + obj[prop] + q + '; ' + delp;
}else{
str += ind + prop + ': {'+ delp + print(obj[prop],delp,delo,ind+ind) + ind + '}' + delo;
}
}
return str;
};
add a comment |
i used pagewil's print method, and it worked very nicely.
here is my slightly extended version with (sloppy) indents and distinct prop/ob delimiters:
var print = function(obj, delp, delo, ind){
delp = delp!=null ? delp : "t"; // property delimeter
delo = delo!=null ? delo : "n"; // object delimeter
ind = ind!=null ? ind : " "; // indent; ind+ind geometric addition not great for deep objects
var str='';
for(var prop in obj){
if(typeof obj[prop] == 'string' || typeof obj[prop] == 'number'){
var q = typeof obj[prop] == 'string' ? "" : ""; // make this "'" to quote strings
str += ind + prop + ': ' + q + obj[prop] + q + '; ' + delp;
}else{
str += ind + prop + ': {'+ delp + print(obj[prop],delp,delo,ind+ind) + ind + '}' + delo;
}
}
return str;
};
add a comment |
i used pagewil's print method, and it worked very nicely.
here is my slightly extended version with (sloppy) indents and distinct prop/ob delimiters:
var print = function(obj, delp, delo, ind){
delp = delp!=null ? delp : "t"; // property delimeter
delo = delo!=null ? delo : "n"; // object delimeter
ind = ind!=null ? ind : " "; // indent; ind+ind geometric addition not great for deep objects
var str='';
for(var prop in obj){
if(typeof obj[prop] == 'string' || typeof obj[prop] == 'number'){
var q = typeof obj[prop] == 'string' ? "" : ""; // make this "'" to quote strings
str += ind + prop + ': ' + q + obj[prop] + q + '; ' + delp;
}else{
str += ind + prop + ': {'+ delp + print(obj[prop],delp,delo,ind+ind) + ind + '}' + delo;
}
}
return str;
};
i used pagewil's print method, and it worked very nicely.
here is my slightly extended version with (sloppy) indents and distinct prop/ob delimiters:
var print = function(obj, delp, delo, ind){
delp = delp!=null ? delp : "t"; // property delimeter
delo = delo!=null ? delo : "n"; // object delimeter
ind = ind!=null ? ind : " "; // indent; ind+ind geometric addition not great for deep objects
var str='';
for(var prop in obj){
if(typeof obj[prop] == 'string' || typeof obj[prop] == 'number'){
var q = typeof obj[prop] == 'string' ? "" : ""; // make this "'" to quote strings
str += ind + prop + ': ' + q + obj[prop] + q + '; ' + delp;
}else{
str += ind + prop + ': {'+ delp + print(obj[prop],delp,delo,ind+ind) + ind + '}' + delo;
}
}
return str;
};
answered Mar 27 '13 at 19:52
bitlessbitless
35925
35925
add a comment |
add a comment |
Another modification of pagewils code... his doesn't print out anything other than strings and leaves the number and boolean fields blank and I fixed the typo on the second typeof just inside the function as created by megaboss.
var print = function( o, maxLevel, level )
{
if ( typeof level == "undefined" )
{
level = 0;
}
if ( typeof maxlevel == "undefined" )
{
maxLevel = 0;
}
var str = '';
// Remove this if you don't want the pre tag, but make sure to remove
// the close pre tag on the bottom as well
if ( level == 0 )
{
str = '<pre>'; // can also be <pre>
}
var levelStr = '<br>';
for ( var x = 0; x < level; x++ )
{
levelStr += ' '; // all those spaces only work with <pre>
}
if ( maxLevel != 0 && level >= maxLevel )
{
str += levelStr + '...<br>';
return str;
}
for ( var p in o )
{
switch(typeof o[p])
{
case 'string':
case 'number': // .tostring() gets automatically applied
case 'boolean': // ditto
str += levelStr + p + ': ' + o[p] + ' <br>';
break;
case 'object': // this is where we become recursive
default:
str += levelStr + p + ': [ <br>' + print( o[p], maxLevel, level + 1 ) + levelStr + ']</br>';
break;
}
}
// Remove this if you don't want the pre tag, but make sure to remove
// the open pre tag on the top as well
if ( level == 0 )
{
str += '</pre>'; // also can be </pre>
}
return str;
};
add a comment |
Another modification of pagewils code... his doesn't print out anything other than strings and leaves the number and boolean fields blank and I fixed the typo on the second typeof just inside the function as created by megaboss.
var print = function( o, maxLevel, level )
{
if ( typeof level == "undefined" )
{
level = 0;
}
if ( typeof maxlevel == "undefined" )
{
maxLevel = 0;
}
var str = '';
// Remove this if you don't want the pre tag, but make sure to remove
// the close pre tag on the bottom as well
if ( level == 0 )
{
str = '<pre>'; // can also be <pre>
}
var levelStr = '<br>';
for ( var x = 0; x < level; x++ )
{
levelStr += ' '; // all those spaces only work with <pre>
}
if ( maxLevel != 0 && level >= maxLevel )
{
str += levelStr + '...<br>';
return str;
}
for ( var p in o )
{
switch(typeof o[p])
{
case 'string':
case 'number': // .tostring() gets automatically applied
case 'boolean': // ditto
str += levelStr + p + ': ' + o[p] + ' <br>';
break;
case 'object': // this is where we become recursive
default:
str += levelStr + p + ': [ <br>' + print( o[p], maxLevel, level + 1 ) + levelStr + ']</br>';
break;
}
}
// Remove this if you don't want the pre tag, but make sure to remove
// the open pre tag on the top as well
if ( level == 0 )
{
str += '</pre>'; // also can be </pre>
}
return str;
};
add a comment |
Another modification of pagewils code... his doesn't print out anything other than strings and leaves the number and boolean fields blank and I fixed the typo on the second typeof just inside the function as created by megaboss.
var print = function( o, maxLevel, level )
{
if ( typeof level == "undefined" )
{
level = 0;
}
if ( typeof maxlevel == "undefined" )
{
maxLevel = 0;
}
var str = '';
// Remove this if you don't want the pre tag, but make sure to remove
// the close pre tag on the bottom as well
if ( level == 0 )
{
str = '<pre>'; // can also be <pre>
}
var levelStr = '<br>';
for ( var x = 0; x < level; x++ )
{
levelStr += ' '; // all those spaces only work with <pre>
}
if ( maxLevel != 0 && level >= maxLevel )
{
str += levelStr + '...<br>';
return str;
}
for ( var p in o )
{
switch(typeof o[p])
{
case 'string':
case 'number': // .tostring() gets automatically applied
case 'boolean': // ditto
str += levelStr + p + ': ' + o[p] + ' <br>';
break;
case 'object': // this is where we become recursive
default:
str += levelStr + p + ': [ <br>' + print( o[p], maxLevel, level + 1 ) + levelStr + ']</br>';
break;
}
}
// Remove this if you don't want the pre tag, but make sure to remove
// the open pre tag on the top as well
if ( level == 0 )
{
str += '</pre>'; // also can be </pre>
}
return str;
};
Another modification of pagewils code... his doesn't print out anything other than strings and leaves the number and boolean fields blank and I fixed the typo on the second typeof just inside the function as created by megaboss.
var print = function( o, maxLevel, level )
{
if ( typeof level == "undefined" )
{
level = 0;
}
if ( typeof maxlevel == "undefined" )
{
maxLevel = 0;
}
var str = '';
// Remove this if you don't want the pre tag, but make sure to remove
// the close pre tag on the bottom as well
if ( level == 0 )
{
str = '<pre>'; // can also be <pre>
}
var levelStr = '<br>';
for ( var x = 0; x < level; x++ )
{
levelStr += ' '; // all those spaces only work with <pre>
}
if ( maxLevel != 0 && level >= maxLevel )
{
str += levelStr + '...<br>';
return str;
}
for ( var p in o )
{
switch(typeof o[p])
{
case 'string':
case 'number': // .tostring() gets automatically applied
case 'boolean': // ditto
str += levelStr + p + ': ' + o[p] + ' <br>';
break;
case 'object': // this is where we become recursive
default:
str += levelStr + p + ': [ <br>' + print( o[p], maxLevel, level + 1 ) + levelStr + ']</br>';
break;
}
}
// Remove this if you don't want the pre tag, but make sure to remove
// the open pre tag on the top as well
if ( level == 0 )
{
str += '</pre>'; // also can be </pre>
}
return str;
};
answered Jul 26 '16 at 12:24
ppetreeppetree
48131126
48131126
add a comment |
add a comment |
Here's function.
function printObj(obj) {
console.log((function traverse(tab, obj) {
let str = "";
if(typeof obj !== 'object') {
return obj + ',';
}
if(Array.isArray(obj)) {
return '[' + obj.map(o=>JSON.stringify(o)).join(',') + ']' + ',';
}
str = str + '{n';
for(var p in obj) {
str = str + tab + ' ' + p + ' : ' + traverse(tab+' ', obj[p]) +'n';
}
str = str.slice(0,-2) + str.slice(-1);
str = str + tab + '},';
return str;
}('',obj).slice(0,-1)))};
It can show object using tab indent with readability.
Sure shot to crash your browser :P
– Satadru Biswas
Aug 1 '17 at 22:32
add a comment |
Here's function.
function printObj(obj) {
console.log((function traverse(tab, obj) {
let str = "";
if(typeof obj !== 'object') {
return obj + ',';
}
if(Array.isArray(obj)) {
return '[' + obj.map(o=>JSON.stringify(o)).join(',') + ']' + ',';
}
str = str + '{n';
for(var p in obj) {
str = str + tab + ' ' + p + ' : ' + traverse(tab+' ', obj[p]) +'n';
}
str = str.slice(0,-2) + str.slice(-1);
str = str + tab + '},';
return str;
}('',obj).slice(0,-1)))};
It can show object using tab indent with readability.
Sure shot to crash your browser :P
– Satadru Biswas
Aug 1 '17 at 22:32
add a comment |
Here's function.
function printObj(obj) {
console.log((function traverse(tab, obj) {
let str = "";
if(typeof obj !== 'object') {
return obj + ',';
}
if(Array.isArray(obj)) {
return '[' + obj.map(o=>JSON.stringify(o)).join(',') + ']' + ',';
}
str = str + '{n';
for(var p in obj) {
str = str + tab + ' ' + p + ' : ' + traverse(tab+' ', obj[p]) +'n';
}
str = str.slice(0,-2) + str.slice(-1);
str = str + tab + '},';
return str;
}('',obj).slice(0,-1)))};
It can show object using tab indent with readability.
Here's function.
function printObj(obj) {
console.log((function traverse(tab, obj) {
let str = "";
if(typeof obj !== 'object') {
return obj + ',';
}
if(Array.isArray(obj)) {
return '[' + obj.map(o=>JSON.stringify(o)).join(',') + ']' + ',';
}
str = str + '{n';
for(var p in obj) {
str = str + tab + ' ' + p + ' : ' + traverse(tab+' ', obj[p]) +'n';
}
str = str.slice(0,-2) + str.slice(-1);
str = str + tab + '},';
return str;
}('',obj).slice(0,-1)))};
It can show object using tab indent with readability.
answered Jun 11 '17 at 12:26
Juho SungJuho Sung
343
343
Sure shot to crash your browser :P
– Satadru Biswas
Aug 1 '17 at 22:32
add a comment |
Sure shot to crash your browser :P
– Satadru Biswas
Aug 1 '17 at 22:32
Sure shot to crash your browser :P
– Satadru Biswas
Aug 1 '17 at 22:32
Sure shot to crash your browser :P
– Satadru Biswas
Aug 1 '17 at 22:32
add a comment |
I think the best solution is to look through the Objects Keys, and then through the Objects Values if you really want to see what the object holds...
console.log(Object.keys(obj));
console.log(Object.values(obj));
There is also this new option if you're using ECMAScript 2016 or newer:
Object.keys(obj).forEach(e => console.log(`key=${e} value=${obj[e]}`));
The solution mentioned above : console.log(obj)
displays too many parameters and is not the most user friendly way to display the data you want. That is why I recommend logging keys and then values separately.
Would you expand the example to include Object and obj.
– historystamp
Dec 28 '18 at 23:30
add a comment |
I think the best solution is to look through the Objects Keys, and then through the Objects Values if you really want to see what the object holds...
console.log(Object.keys(obj));
console.log(Object.values(obj));
There is also this new option if you're using ECMAScript 2016 or newer:
Object.keys(obj).forEach(e => console.log(`key=${e} value=${obj[e]}`));
The solution mentioned above : console.log(obj)
displays too many parameters and is not the most user friendly way to display the data you want. That is why I recommend logging keys and then values separately.
Would you expand the example to include Object and obj.
– historystamp
Dec 28 '18 at 23:30
add a comment |
I think the best solution is to look through the Objects Keys, and then through the Objects Values if you really want to see what the object holds...
console.log(Object.keys(obj));
console.log(Object.values(obj));
There is also this new option if you're using ECMAScript 2016 or newer:
Object.keys(obj).forEach(e => console.log(`key=${e} value=${obj[e]}`));
The solution mentioned above : console.log(obj)
displays too many parameters and is not the most user friendly way to display the data you want. That is why I recommend logging keys and then values separately.
I think the best solution is to look through the Objects Keys, and then through the Objects Values if you really want to see what the object holds...
console.log(Object.keys(obj));
console.log(Object.values(obj));
There is also this new option if you're using ECMAScript 2016 or newer:
Object.keys(obj).forEach(e => console.log(`key=${e} value=${obj[e]}`));
The solution mentioned above : console.log(obj)
displays too many parameters and is not the most user friendly way to display the data you want. That is why I recommend logging keys and then values separately.
edited Jan 3 at 18:17
answered Oct 19 '18 at 12:29
Max Alexander HannaMax Alexander Hanna
795518
795518
Would you expand the example to include Object and obj.
– historystamp
Dec 28 '18 at 23:30
add a comment |
Would you expand the example to include Object and obj.
– historystamp
Dec 28 '18 at 23:30
Would you expand the example to include Object and obj.
– historystamp
Dec 28 '18 at 23:30
Would you expand the example to include Object and obj.
– historystamp
Dec 28 '18 at 23:30
add a comment |
If you're looking for something that can return a prettified string of any javascript object, check out https://github.com/fresheneesz/beautinator . An example:
var result = beautinator({ "font-size": "26px","font-family": "'Open Sans', sans-serif",color: "white", overflow: "hidden",padding: "4px 4px 4px 8px",Text: { display: "block", width: "100%","text-align": "center", "padding-left": "2px","word-break": "break-word"}})
console.log(result)
Results in:
{ "font-size": "26px",
"font-family": "'Open Sans', sans-serif",
color: "white", overflow: "hidden",
padding: "4px 4px 4px 8px",
Text: { display: "block", width: "100%",
"text-align": "center", "padding-left": "2px",
"word-break": "break-word"
}
}
It even works if there are functions in your object.
add a comment |
If you're looking for something that can return a prettified string of any javascript object, check out https://github.com/fresheneesz/beautinator . An example:
var result = beautinator({ "font-size": "26px","font-family": "'Open Sans', sans-serif",color: "white", overflow: "hidden",padding: "4px 4px 4px 8px",Text: { display: "block", width: "100%","text-align": "center", "padding-left": "2px","word-break": "break-word"}})
console.log(result)
Results in:
{ "font-size": "26px",
"font-family": "'Open Sans', sans-serif",
color: "white", overflow: "hidden",
padding: "4px 4px 4px 8px",
Text: { display: "block", width: "100%",
"text-align": "center", "padding-left": "2px",
"word-break": "break-word"
}
}
It even works if there are functions in your object.
add a comment |
If you're looking for something that can return a prettified string of any javascript object, check out https://github.com/fresheneesz/beautinator . An example:
var result = beautinator({ "font-size": "26px","font-family": "'Open Sans', sans-serif",color: "white", overflow: "hidden",padding: "4px 4px 4px 8px",Text: { display: "block", width: "100%","text-align": "center", "padding-left": "2px","word-break": "break-word"}})
console.log(result)
Results in:
{ "font-size": "26px",
"font-family": "'Open Sans', sans-serif",
color: "white", overflow: "hidden",
padding: "4px 4px 4px 8px",
Text: { display: "block", width: "100%",
"text-align": "center", "padding-left": "2px",
"word-break": "break-word"
}
}
It even works if there are functions in your object.
If you're looking for something that can return a prettified string of any javascript object, check out https://github.com/fresheneesz/beautinator . An example:
var result = beautinator({ "font-size": "26px","font-family": "'Open Sans', sans-serif",color: "white", overflow: "hidden",padding: "4px 4px 4px 8px",Text: { display: "block", width: "100%","text-align": "center", "padding-left": "2px","word-break": "break-word"}})
console.log(result)
Results in:
{ "font-size": "26px",
"font-family": "'Open Sans', sans-serif",
color: "white", overflow: "hidden",
padding: "4px 4px 4px 8px",
Text: { display: "block", width: "100%",
"text-align": "center", "padding-left": "2px",
"word-break": "break-word"
}
}
It even works if there are functions in your object.
answered Sep 22 '17 at 8:39
B TB T
27.5k25132162
27.5k25132162
add a comment |
add a comment |
A simple way to show the contents of the object is using console.log as shown below
console.log("Object contents are ", obj);
Please note that I am not using '+' to concatenate the object. If I use '+' than I will only get the string representation if object, something like [Object object].
add a comment |
A simple way to show the contents of the object is using console.log as shown below
console.log("Object contents are ", obj);
Please note that I am not using '+' to concatenate the object. If I use '+' than I will only get the string representation if object, something like [Object object].
add a comment |
A simple way to show the contents of the object is using console.log as shown below
console.log("Object contents are ", obj);
Please note that I am not using '+' to concatenate the object. If I use '+' than I will only get the string representation if object, something like [Object object].
A simple way to show the contents of the object is using console.log as shown below
console.log("Object contents are ", obj);
Please note that I am not using '+' to concatenate the object. If I use '+' than I will only get the string representation if object, something like [Object object].
answered Oct 15 '18 at 6:24
VikramVikram
1,01111230
1,01111230
add a comment |
add a comment |
1 2
next
protected by Community♦ Jan 3 '12 at 21:23
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
7
Would you please reword your question? What do you mean by "formatted way"? As in, with rich formatting, like bold/italic/etc?
– Sasha Chedygov
Jun 5 '09 at 19:03
is there a way to display the runtime value of a variable by printing the value of the variable using some console commands?
– BlackPanther
Aug 3 '15 at 6:54
1
@BlackPanther Just do
console.log("", yourObject1, yourObject2, yourObject3, etc...);
. A shorter version is to just doconsole.log(yourObject1, yourObject2, etc...);
.– tom_mai78101
Jul 31 '17 at 11:52
Can you please select a better answer that more accurately reflects community consensus?
– HoldOffHunger
Apr 3 '18 at 16:54
Like this
console.log('a string', aNumber, anObject)
– onmyway133
Oct 15 '18 at 11:58