Cara Memperbaiki “[object Object]” di JavaScript (Cara Terbaik Menampilkan Objek)

1. Pendahuluan

Saat membangun program dalam JavaScript, Anda mungkin kadang‑kadang melihat string “[object Object]” ketika mencoba menampilkan sebuah objek. Ini adalah situasi umum yang terjadi ketika objek JavaScript dikeluarkan secara langsung tanpa pemformatan.

Dalam artikel ini, kami akan menjelaskan apa arti sebenarnya dari “[object Object]” dan bagaimana menampilkan isi sebuah objek dengan cara yang dapat dibaca.

Panduan ini dirancang untuk pengembang pemula hingga menengah, dan mencakup contoh praktis serta potongan kode untuk membantu Anda memahami topik ini lebih mendalam.

2. Apa Itu ‘[object Object]’?

Dalam JavaScript, ketika Anda mencoba mengubah sebuah objek menjadi string, perilaku default sering menghasilkan “[object Object]”. Output ini mewakili informasi tipe tentang nilai tersebut, tetapi tidak menampilkan isi sebenarnya dari objek.

Mengapa ‘[object Object]’ Muncul?

Objek JavaScript memiliki metode toString() default. Metode ini dipanggil setiap kali sebuah objek diperlakukan sebagai string. Namun, menurut spesifikasi standar JavaScript, objek mengembalikan format berikut secara default ketika diubah menjadi string.

console.log({}); // Output: [object Object]

Perilaku ini hanya menampilkan informasi tipe sebagai “object” dan tidak menyertakan detail tentang kunci atau nilai di dalam objek. Karena itu, pengembang perlu menggunakan metode lain untuk memeriksa dan menampilkan data objek dengan tepat.

3. Mengapa ‘[object Object]’ Muncul

Peran Metode toString()

Semua objek JavaScript mewarisi metode Object.prototype.toString(). Metode ini secara otomatis dipanggil ketika sebuah objek diubah menjadi string.

Untuk mengonfirmasi perilaku default, lihat kode berikut:

const obj = { key: "value" };
console.log(obj.toString()); // Output: [object Object]

Seperti yang Anda lihat, toString() dirancang untuk mengembalikan “[object Object]” untuk objek biasa secara default.

Contoh yang Disebabkan oleh Koersi Tipe Implisit

Perilaku yang sama terjadi ketika sebuah objek digabungkan dengan string.

const obj = { key: "value" };
console.log("Data: " + obj); // Output: Data: [object Object]

Dalam contoh ini, obj diubah menjadi string, dan toString() dipanggil secara internal—menghasilkan output “[object Object]”.

4. Cara Menghindari ‘[object Object]’

4.1. Mengonversi Objek menjadi String dengan JSON.stringify()

Pendekatan termudah dan paling umum adalah menggunakan JSON.stringify() untuk mengonversi sebuah objek menjadi string berformat JSON.

Contoh: Penggunaan Dasar JSON.stringify

const obj = { key: "value", id: 123 };
console.log(JSON.stringify(obj)); // Output: {"key":"value","id":123}

Dalam kode ini, kunci dan nilai objek ditampilkan secara akurat dalam format JSON.

Pretty Printing (Dengan Indentasi)

Anda juga dapat mengeluarkan JSON yang diformat dengan indentasi untuk meningkatkan keterbacaan.

console.log(JSON.stringify(obj, null, 2));

Output:

{
  "key": "value",
  "id": 123
}

Karena JSON.stringify() dapat memformat objek kompleks dan struktur bersarang dengan bersih, ia sangat berguna untuk debugging.

4.2. Memeriksa Objek secara Detail dengan console.dir()

Dengan menggunakan console.dir(), Anda dapat memeriksa properti dan metode sebuah objek dalam struktur hierarkis.

Contoh: Cara Menggunakan console.dir

const obj = { key: "value", nested: { a: 1, b: 2 } };
console.dir(obj);

Output ini ditampilkan dalam format yang memungkinkan Anda memperluas dan memeriksa struktur objek di dalam DevTools.

Perbedaan antara console.dir dan console.log:

  • console.log(obj) menampilkan objek dalam gaya satu baris, yang tidak ideal untuk memeriksa struktur kompleks.
  • console.dir(obj) mempertahankan struktur hierarkis, menjadikannya berguna untuk objek dan array bersarang.

4.3. Menerapkan Metode toString() Kustom

Anda dapat menyesuaikan output default “[object Object]” dengan mendefinisikan metode toString() Anda sendiri pada sebuah objek.

Contoh: Implementasi Custom toString

const obj = {
  key: "value",
  id: 123,
  toString() {
    return `Key: ${this.key}, ID: ${this.id}`;
  },
};
console.log(obj.toString()); // Output: Key: value, ID: 123

Dengan pendekatan ini, ketika objek diperlakukan sebagai string, itu akan menghasilkan format kustom Anda alih-alih nilai default.

4.4. Mencetak Isi Objek dengan Loop for…in

Opsi lain adalah melooping melalui kunci dan nilai objek dan mencetaknya secara manual.

Contoh: Menggunakan Loop for…in

const obj = { key: "value", id: 123 };
for (const key in obj) {
  console.log(`${key}: ${obj[key]}`);
}

Output:

key: value
id: 123

Pendekatan ini sederhana dan mudah disesuaikan, menjadikannya cocok untuk memeriksa objek kecil dengan cepat.

4.5. Menggunakan Object.entries() atau Object.keys()

Mulai dari ES6, JavaScript menyediakan metode untuk mengekstrak kunci dan nilai sebagai array.

Contoh: Menggunakan Object.entries

const obj = { key: "value", id: 123 };
console.log(Object.entries(obj));

Output:

[ [ 'key', 'value' ], [ 'id', 123 ] ]

Dengan mendapatkan pasangan kunci-nilai sebagai array, Anda dapat memanfaatkan metode array untuk pemrosesan lebih lanjut.

5. Contoh Lanjutan: Menampilkan Objek dan Array Kompleks

5.1. Menampilkan Objek Bertingkat

Ketika sebuah objek berisi objek lain, mari kita lihat cara mudah untuk menampilkan isinya dengan jelas.

Contoh: Menampilkan Objek Bertingkat

const data = {
  user: {
    name: "John",
    age: 30,
    address: {
      city: "Tokyo",
      country: "Japan",
    },
  },
  hobbies: ["reading", "traveling"],
};

console.log(JSON.stringify(data, null, 2));

Output:

{
  "user": {
    "name": "John",
    "age": 30,
    "address": {
      "city": "Tokyo",
      "country": "Japan"
    }
  },
  "hobbies": [
    "reading",
    "traveling"
  ]
}

Seperti yang ditunjukkan di atas, menggunakan JSON.stringify() membuat struktur objek bertingkat mudah dipahami.

5.2. Menampilkan Objek yang Berisi Array

Jika sebuah objek berisi array, Anda dapat menanganinya dengan cara serupa.

Contoh: Menampilkan Objek dengan Array

const order = {
  id: 101,
  items: [
    { name: "Apple", price: 150 },
    { name: "Banana", price: 100 },
    { name: "Cherry", price: 200 },
  ],
  total: 450,
};

console.table(order.items);

Output:

(index)nameprice
0Apple150
1Banana100
2Cherry200

Dalam contoh ini, console.table() menampilkan item array dalam format tabel. Ini membuatnya lebih mudah untuk memeriksa struktur data secara visual dan meningkatkan efisiensi debugging.

5.3. Menangani Objek dengan Referensi Sirkular

Dalam JavaScript, jika sebuah objek berisi referensi sirkular, menggunakan JSON.stringify() secara langsung akan melemparkan kesalahan.

Contoh: Kesalahan Referensi Sirkular

const objA = {};
const objB = { a: objA };
objA.b = objB;

console.log(JSON.stringify(objA)); // TypeError: Converting circular structure to JSON

Dalam kasus ini, Anda dapat menyelesaikan masalah dengan menggunakan pustaka pihak ketiga atau mengimplementasikan fungsi kustom untuk menangani referensi sirkular.

Contoh Solusi: Menggunakan Pustaka flatted

const { stringify } = require("flatted");

console.log(stringify(objA));

Pendekatan ini memungkinkan Anda untuk stringify objek yang berisi referensi sirkular dengan aman.

5.4. Mendapatkan Hanya Kunci dari Objek atau Array

Saat mengeksplorasi struktur data, juga berguna untuk mengekstrak dan menampilkan hanya kunci atau nilai.

Mendapatkan Daftar Kunci:

const obj = { id: 101, name: "Alice", age: 25 };
console.log(Object.keys(obj)); // Output: [ 'id', 'name', 'age' ]

Mendapatkan Daftar Nilai:

console.log(Object.values(obj)); // Output: [ 101, 'Alice', 25 ]

Mendapatkan Pasangan Kunci-Nilai:

console.log(Object.entries(obj)); // Output: [ [ 'id', 101 ], [ 'name', 'Alice' ], [ 'age', 25 ] ]

Metode-metode ini membantu untuk menganalisis data dan mengekstrak informasi spesifik secara efisien.

6. Kesalahan Umum dan Perbaikannya

6.1. Kesalahan Referensi Sirkular: “Mengonversi struktur sirkular ke JSON”

Pesan Kesalahan:

TypeError: Converting circular structure to JSON

Penyebab:
Ini terjadi ketika properti sebuah objek merujuk kembali ke objek yang sama, menciptakan struktur sirkular.

Contoh:

const objA = {};
const objB = { parent: objA };
objA.child = objB;

console.log(JSON.stringify(objA)); // Error occurs

Solusi 1: Gunakan Fungsi Serialisasi Kustom

function safeStringify(obj) {
  const seen = new WeakSet();
  return JSON.stringify(obj, (key, value) => {
    if (typeof value === "object" && value !== null) {
      if (seen.has(value)) return "[Circular]";
      seen.add(value);
    }
    return value;
  });
}

console.log(safeStringify(objA)); 
// Output: {"child":{"parent":"[Circular]"}}

Solusi 2: Gunakan Pustaka Pihak Ketiga

Jika Anda menggunakan pustaka yang dirancang untuk referensi sirkular, seperti flatted, Anda dapat menghindari kesalahan ini dengan lebih mudah.

const { stringify } = require("flatted");
console.log(stringify(objA));

Pendekatan ini memungkinkan Anda menangani struktur sirkular yang kompleks dengan aman menggunakan bantuan pustaka.

6.2. Kesalahan Saat Menangani undefined atau null

Contoh Kesalahan:

const obj = undefined;
console.log(obj.key); // TypeError: Cannot read properties of undefined

Penyebab:
Mencoba mengakses properti pada undefined atau null menghasilkan kesalahan.

Solusi: Gunakan Optional Chaining

const obj = undefined;
console.log(obj?.key); // Output: undefined (no error)

Optional chaining (?.) memungkinkan akses aman bahkan ketika objek tidak ada.

6.3. Kesalahan Properti Tidak Terdefinisi

Contoh Kesalahan:

const obj = {};
console.log(obj.value.toString()); // TypeError: Cannot read properties of undefined

Penyebab:
Ini terjadi ketika Anda mencoba mengakses properti yang tidak ada.

Solusi 1: Tetapkan Nilai Default

console.log((obj.value || "default").toString()); // Output: default

Solusi 2: Gabungkan Optional Chaining dan Nullish Coalescing

console.log(obj.value?.toString() ?? "default"); // Output: default

Ini membuat akses properti lebih aman dan mencegah kesalahan runtime.

6.4. Kesalahan Saat Menggunakan Object.assign()

Contoh Kesalahan:

const target = null;
Object.assign(target, { key: "value" }); // TypeError: Cannot convert undefined or null to object

Penyebab:
Object.assign() memerlukan sebuah objek sebagai argumen pertama, sehingga memberikan null atau undefined menyebabkan kesalahan.

Solusi:
Berikan objek kosong sebagai nilai awal.

const target = Object.assign({}, { key: "value" });
console.log(target); // Output: { key: "value" }

6.5. Kesalahan JSON.parse: “Unexpected token”

Contoh Kesalahan:

const jsonString = "{key: 'value'}";
console.log(JSON.parse(jsonString)); // SyntaxError: Unexpected token k in JSON

Penyebab:
JSON memiliki aturan sintaks yang ketat. Menggunakan tanda kutip tunggal atau menghilangkan kutipan di sekitar kunci membuatnya menjadi JSON yang tidak valid.

Solusi:
Perbaiki string menjadi format JSON yang valid.

const jsonString = '{"key": "value"}';
console.log(JSON.parse(jsonString)); // Output: { key: 'value' }

7. Ringkasan

Dalam artikel ini, kami membahas masalah tampilan “[object Object]” yang umum di JavaScript, termasuk mengapa hal itu terjadi dan cara memperbaikinya dengan solusi praktis. Mari tinjau poin-poin utama dan susun apa yang telah kami pelajari.

7.1. Apa yang Dimaksud dengan ‘[object Object]’

  • Objek JavaScript secara default dikonversi menjadi string menggunakan metode toString().
  • Akibatnya, objek biasa ditampilkan dalam format “[object Object]”.

7.2. Cara Menampilkan Konten Objek dengan Benar

Kami memperkenalkan beberapa pendekatan praktis untuk memeriksa dan menampilkan data objek dengan lebih jelas.

  1. JSON.stringify() untuk mengonversi objek menjadi string yang dapat dibaca:
  • Menampilkan objek dalam format JSON dan mendukung pretty printing (output terformat).
  1. console.dir() untuk inspeksi objek hierarkis:
  • Memungkinkan Anda menjelajahi struktur objek secara detail di DevTools.
  1. Menerapkan metode toString() khusus:
  • Memungkinkan Anda mendefinisikan format tampilan sendiri untuk objek.
  1. Menggunakan loop dan Object.entries():
  • Mengekstrak kunci dan nilai untuk mencetaknya secara manual.

7.3. Kasus Penggunaan Lanjutan dan Penanganan Objek Kompleks

  • Objek dan array bersarang: JSON.stringify() dan console.table() membantu menampilkan data dalam format yang bersih dan mudah dibaca.
  • Cara menangani kesalahan referensi sirkular:
  • Gunakan fungsi khusus atau pustaka pihak ketiga untuk menghindari kegagalan.
  • Ekstraksi data yang efisien:
  • Gunakan Object.keys(), Object.values(), dan Object.entries() untuk mengambil informasi secara efisien.

7.4. Pencegahan Kesalahan dan Tips Debugging

Kami juga menjelaskan kesalahan umum yang terkait dengan operasi objek dan cara memperbaikinya.

  1. Kesalahan referensi sirkular:
  • Tangani dengan serializer khusus atau pustaka.
  1. Kesalahan saat mengakses undefined atau null:
  • Gunakan optional chaining dan tetapkan nilai default.
  1. Kesalahan JSON.parse:
  • Pastikan string tersebut berformat JSON yang valid.

Dengan menerapkan teknik-teknik ini, Anda dapat mencegah kesalahan sebelumnya dan membuat proses debugging jauh lebih lancar.

7.5. Pemikiran Akhir

Objek JavaScript adalah alat yang kuat untuk mengelola data secara fleksibel. Namun, tanpa memahami cara kerja objek, Anda mungkin menghadapi masalah tampilan seperti “[object Object]” atau kesalahan runtime yang tidak terduga.

Gunakan teknik dan strategi penanganan kesalahan yang diperkenalkan dalam artikel ini untuk menulis kode yang lebih bersih, aman, dan efisien.

Langkah Selanjutnya:

  • Untuk memperdalam pemahaman Anda tentang penanganan objek, periksa artikel terkait dan dokumentasi resmi.
  • Tulis dan jalankan kode nyata untuk mengonfirmasi perilaku dan memperkuat keterampilan Anda.

Itulah penjelasan kami tentang masalah tampilan objek JavaScript. Terima kasih telah membaca!

広告