🧐

console.logで[Object]が出たときはconsole.log('%o', obj)という選択肢もある

2022/04/22に公開

検索していると

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 を利用できる場合は、使うことで一番タイピング数を少なくすることができそうですね。

https://nodejs.org/api/util.html#utilformatformat-args

Discussion