🧐
console.logで[Object]が出たときはconsole.log('%o', obj)という選択肢もある
検索していると
console.log(JSON.stringify(obj));
だったり、
console.dir(obj, {depth: null});
等とする記事が多いですが、ドキュメントを読むとutil.format
に %o
が用意してあるので、それを利用すると
console.log('%o', obj);
と書けます。
実際に試すと
$ node
> const obj = {
hoge: {
fuga : 1,
piyo: {
foo: 10,
bar: {
a: 100,
b: {
c: 1000
}
}
}
}
};
> console.log(obj);
{ hoge: { fuga: 1, piyo: { foo: 10, bar: [Object] } } }
> console.log(JSON.stringify(obj));
{"hoge":{"fuga":1,"piyo":{"foo":10,"bar":{"a":100,"b":{"c":1000}}}}}
> console.dir(obj, {depth: null});
{
hoge: {
fuga: 1,
piyo: { foo: 10, bar: { a: 100, b: { c: 1000 } } }
}
}
> console.log('%o', obj);
{
hoge: {
fuga: 1,
piyo: { foo: 10, bar: { a: 100, b: { c: 1000 } } }
}
}
はい、 %o
でも Object
の中身も表示できてます。
ただし、node v11からデフォルトで4階層までとなっているようです。
> const obj2 = {
hoge: {
fuga : 1,
piyo: {
foo: 10,
bar: {
a: 100,
b: {
c: 1000,
d: {
e: {
f: 10000
}
}
}
}
}
}
};
> console.log("%o", obj2)
{
hoge: {
fuga: 1,
piyo: { foo: 10, bar: { a: 100, b: { c: 1000, d: [Object] } } }
}
}
ということで、 %o
を利用できる場合は、使うことで一番タイピング数を少なくすることができそうですね。
Discussion
console standard 的には
%o
(console.dirxml 相当) ではなくて%O
(console.dir 相当)では? みたいなところあります。