console.log()でオブジェクトの階層が深い場合に[Object]となる場合の対処法

console.log()でオブジェクトの階層が深い場合に[Object]となる場合の対処法

console.log()でオブジェクトを表示すると、ある程度の階層までは表示されるのですが、深すぎると[Object]となってしまい、表示されなくなってしまいます。

これを表示するにはJSON.stringify()を使用します。

JSON.stringify()の第三引数

JSON.stringifyには引数が3つあって、3つ目に数値で「2」と指定すると整形されます。インデントが2となります。文字列で\tと指定するとタブとなります。

JSON.stringify()の第二引数

第二引数では第一引数のオブジェクトのキーを文字列の配列で指定します。

第二引数で指定されたkey-valueのみ表示されるようになります。

ちょっと難しい使い方として、replacerというコールバック関数を指定します。

ユースケースがあまり思いつきませんが、JSのErrorオブジェクトをconsole.logで表示したい場合はこのreplacerを使えばエラー内容を表示することができます。

コールバック関数の第一引数はオブジェクトのkey,第二引数はオブジェクトのvalueとなります。以下はErrorオブジェクトの場合の出力例です。

Object.getOwnPropertyNames()

valueが関数の場合、key-valueが消える

オブジェクトの値が関数の場合、そのキーごと消えてしまいます。

util.inspectを使う

nodeのバージョン9くらいからutil.inspectでオブジェクトを文字列化してくれます。

depth:nullオプションを指定することで、階層が深くてもvalueが関数であっても表示されるようになります。

Node.jsでutil.debuglogを使用してログ出力する方法」info, warnを使えばもっと便利です。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA