A compilation of the many useful answers from (at least) Node.js `v0.10.33` (stable) / `v0.11.14` (unstable) presumably through (at least) `v7.7.4` (the version current as of the latest update to this answer). Tip of the hat to [Rory O'Kane](https://stackoverflow.com/users/578288/rory-okane) for his help.
tl;dr
To get the desired output for the example in the question, use console.dir():
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
Why not util.inspect()? Because it’s already at the heart of diagnostic output: console.log() and console.dir() as well as the Node.js REPL use util.inspect() implicitly. It’s generally not necessary to require('util') and call util.inspect() directly - unless you want to capture the object visualization in a variable rather than printing to the console (e.g., let s = util.inspect(myObject, { depth: null }))
Details below.
- The REPL: implicitly prints any expression's return value with util.inspect()with  syntax coloring;
 i.e., just typing a variable's name and hitting Enter will print an inspected version of its value; e.g.:
- o = { one: 1, two: 'deux', foo: function(){} }  // The REPL echoes the object definition with syntax coloring.
 
util.inspect() automatically pretty-prints object and array representations, but produces multiline output only when needed.
- The pretty-printing behavior can be controlled by the - compactproperty in the optional- optionsargument;- falseuses multi-line output unconditionally, whereas- truedisables pretty-printing altogether; it can also be set to a number (the default is- 3) to control the conditional multi-line behavior – see the docs.
 
- By default, output is wrapped at around 60 characters thanks, Shrey
, regardless of whether the output is sent to a file or a terminal. In practice, since line breaks only happen at property boundaries, you will often end up with shorter lines, but they can also be longer (e.g., with long property values). 
- In v6.3.0+ you can use the - breakLengthoption to override the 60-character limit; if you set it to- Infinity, everything is output on a single line.
 
If you want more control over pretty-printing, consider using JSON.stringify() with a 3rd argument, but note the following:
- Fails with objects that have circular references, such as modulein the global context.
- Methods (functions) will by design NOT be included.
- You can't opt into showing hidden (non-enumerable) properties.
- Example call:
- JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
 
util.inspect() options object (2nd argument):
An optional options object may be passed that alters certain aspects of the formatted string; some of the properties supported are:
See the latest Node.js docs for the current, full list.
- showHidden
 - 
- if true,  then the object's non-enumerable properties [those designated not to show up when you usefor keys in objorObject.keys(obj)] will be shown too. Defaults tofalse.
 
- depth
 - 
- tells inspect how many times to recurse while formatting the object. This is useful for inspecting large complicated objects. Defaults to 2. To make it recurse indefinitely, pass null.
 
- colors
 - 
- if true, then the output will be styled with ANSI color codes. Defaults to false. Colors are customizable [… – see link].
 
- customInspect
 - 
- if false, then custominspect()functions defined on the objects being inspected won't be called. Defaults totrue.
 
util.format() format-string placeholders (1st argument)
Some of the supported placeholders are:
See the latest Node.js docs for the current, full list.
- %s– String.
- %d– Number (both integer and float).
- %j– JSON.
- %%– single percent sign (‘%’). This does not consume an argument.