😺
✍️ Node.jsでオブジェクトが[object Object]と表示される原因と対処法
JavaScript(Node.js)でログ出力を行う際に、ネストされたオブジェクトの一部が "[object Object]"
と表示されてしまうことがあります。この記事ではその原因と、見やすく詳細な構造を表示するための方法を紹介します。
問題の背景
以下のように console.log()
を使ってオブジェクトを出力した際:
const sampleData = {
id: 101,
user: {
name: "Alice",
contact: {
email: "alice@example.com",
phone: "000-0000-0000"
}
},
status: "active",
metadata: {
createdAt: new Date(),
updatedAt: new Date(),
tags: ["sample", "log", "debug"],
config: {
theme: "dark",
options: {
showSidebar: true,
enableLogging: false
}
}
}
};
console.log(sampleData);
このような出力になってしまうことがあります:
{
id: 101,
user: { name: 'Alice', contact: [Object] },
status: 'active',
metadata: { createdAt: 2024-01-01T00:00:00.000Z, updatedAt: 2024-01-01T00:00:00.000Z, tags: [Array], config: [Object] }
}
[Object]
や [Array]
と表示されてしまい、中身が見えません。
原因:console.logのネスト深さ制限
Node.js の console.log()
は、デフォルトでオブジェクトのネストを2階層までしか展開しません。それ以上は [Object]
や [Array]
という省略形になります。
対処法
console.dir()
を使う
方法1: console.dir(sampleData, { depth: null, colors: true });
-
depth: null
を指定することで無限にネストを展開 -
colors: true
でターミナルで見やすく表示
util.inspect()
を使う
方法2: import util from 'util';
console.log(util.inspect(sampleData, { depth: null, colors: true }));
より高度な制御が可能で、Buffer
や Symbol
なども正確に見えます。
JSON.stringify()
を使う
方法3: console.log(JSON.stringify(sampleData, null, 2));
ただし、関数や Symbol
、Date
、Buffer
などはそのままでは適切にシリアライズされないことがあります。
まとめ
方法 | 特徴 |
---|---|
console.log() |
ネスト2階層まで、省略される |
console.dir() |
ネスト全展開可能、シンプルに使える |
util.inspect() |
高度な制御が可能、デバッグに最適 |
JSON.stringify() |
JSON形式で出力、特殊型に注意が必要 |
Node.jsでのデバッグを快適にするには、console.dir()
や util.inspect()
の使い分けが非常に有効です。
開発中にオブジェクトの構造を正確に確認したいときは、ぜひ活用してみてください。
Discussion