In Firefox, these function behave quite differently: log
only prints out a toString
representation, whereas dir
prints out a navigable tree.
In Chrome, log
already prints out a tree — most of the time. However, Chrome’s log
still stringifies certain classes of objects, even if they have properties. Perhaps the clearest example of a difference is a regular expression:
> console.log(/foo/); /foo/ > console.dir(/foo/); * /foo/ global: false ignoreCase: false lastIndex: 0 ...
You can also see a clear difference with arrays (e.g., console.dir([1,2,3])
) which are log
ged differently from normal objects:
> console.log([1,2,3]) [1, 2, 3] > console.dir([1,2,3]) * Array[3] 0: 1 1: 2 2: 3 length: 3 * __proto__: Array[0] concat: function concat() { [native code] } constructor: function Array() { [native code] } entries: function entries() { [native code] } ...
DOM objects also exhibit differing behavior, as noted on another answer.