Tipe Data Lanjutan di JavaScript: Symbol dan BigInt

JavaScript adalah bahasa pemrograman yang terus berevolusi mengikuti kebutuhan pengembang modern. Selain tipe data dasar seperti Number
, String
, Boolean
, Null
, dan Undefined
, kini JavaScript memiliki tipe data lanjutan yang jarang dibahas, yaitu Symbol dan BigInt. Kehadiran dua tipe data ini bukan sekadar tambahan, melainkan solusi atas keterbatasan yang ada sebelumnya. Artikel ini akan membahas keduanya secara lebih mendalam.
1. Symbol
Apa itu Symbol?
Symbol
adalah tipe data primitif yang diperkenalkan pada ECMAScript 2015 (ES6). Setiap nilai Symbol
bersifat unik dan tidak dapat digandakan, meskipun dibuat dengan deskripsi yang sama. Hal ini membuatnya ideal untuk digunakan sebagai identitas unik.
const s1 = Symbol("id");
const s2 = Symbol("id");
console.log(s1 === s2); // false
Pada contoh di atas, walaupun kedua Symbol
memiliki deskripsi "id"
, hasil perbandingan menunjukkan bahwa keduanya berbeda. Inilah kekuatan utama Symbol
: identitas yang unik.
Symbol sebagai Kunci Properti
Salah satu kegunaan utama Symbol
adalah sebagai kunci properti pada objek. Berbeda dengan string, kunci berbasis Symbol
tidak akan muncul dalam perulangan for...in
atau Object.keys()
, sehingga lebih “privat”.
const ID = Symbol("internalId");
const user = {
name: "Rina",
[ID]: 12345
};
console.log(user.name); // "Rina"
console.log(user[ID]); // 12345
console.log(Object.keys(user)); // ["name"]
Properti dengan kunci Symbol
hanya bisa diakses jika kita memiliki referensi Symbol
tersebut.
Well-known Symbols
JavaScript memiliki beberapa Symbol
bawaan, yang disebut well-known symbols, untuk mendefinisikan perilaku khusus. Misalnya:
Symbol.iterator
: membuat objek dapat diiterasi denganfor...of
.Symbol.toStringTag
: mengubah hasilObject.prototype.toString
.Symbol.hasInstance
: menentukan hasil dari operatorinstanceof
.
Contoh implementasi Symbol.iterator
:
const range = {
start: 1,
end: 3,
[Symbol.iterator]() {
let current = this.start;
const end = this.end;
return {
next() {
if (current <= end) {
return { value: current++, done: false };
}
return { done: true };
}
};
}
};
for (const n of range) {
console.log(n); // 1, 2, 3
}
Dengan Symbol.iterator
, objek range
dapat digunakan dalam perulangan for...of
layaknya array.
2. BigInt
Apa itu BigInt?
BigInt
adalah tipe data primitif yang diperkenalkan pada ECMAScript 2020. Tipe ini memungkinkan JavaScript untuk merepresentasikan bilangan bulat dengan ukuran sangat besar, melampaui batas aman Number
(2^53 - 1
).
const big = 9007199254740993n; // BigInt
console.log(big + 2n); // 9007199254740995n
Jika menggunakan Number
, hasil di atas akan kehilangan presisi. Dengan BigInt
, angka besar dapat dihitung dengan aman.
Cara Membuat BigInt
Ada dua cara utama untuk membuat BigInt
:
- Dengan menambahkan huruf
n
di akhir literal angka:const a = 12345678901234567890n;
- Dengan fungsi
BigInt()
:const b = BigInt("12345678901234567890");
Operasi dengan BigInt
BigInt mendukung operasi matematika dasar: +
, -
, *
, /
, dan %
. Namun, pembagian selalu dibulatkan ke bawah.
const x = 10n;
const y = 3n;
console.log(x / y); // 3n (dibulatkan ke bawah)
console.log(x % y); // 1n
Catatan penting: Anda tidak bisa langsung mencampur BigInt
dengan Number
.
const a = 10n;
const b = 5;
// console.log(a + b); // Error
console.log(a + BigInt(b)); // 15n
Konversi BigInt
Konversi dari BigInt
ke Number
dapat mengakibatkan kehilangan presisi jika nilainya terlalu besar.
const big = 12345678901234567890n;
console.log(Number(big)); // Bisa kehilangan presisi
Sementara untuk penyimpanan atau transfer data, biasanya BigInt
dikonversi ke String
.
const data = { id: 12345678901234567890n };
console.log(JSON.stringify({ id: data.id.toString() }));
3. Kapan Menggunakan Symbol dan BigInt?
- Symbol
- Untuk membuat kunci properti unik pada objek.
- Untuk mendefinisikan perilaku khusus melalui well-known symbols.
- Cocok jika ingin menambahkan data “privat-ish” ke objek.
- BigInt
- Untuk perhitungan yang melibatkan angka sangat besar.
- Untuk ID unik yang melampaui batas angka biasa.
- Untuk aplikasi seperti kriptografi atau keuangan.
4. Tabel Perbandingan Singkat
Fitur | Symbol | BigInt |
---|---|---|
Jenis data | Primitif, unik | Primitif, bilangan bulat besar |
Tujuan utama | Identitas unik, kunci properti | Menghitung angka besar tanpa batas |
Operasi matematika | Tidak bisa | Bisa (+, -, *, /, %) |
Serialisasi JSON | Diabaikan | Harus dikonversi ke string dulu |
Kapan dipakai | Saat butuh kunci unik | Saat butuh angka lebih besar dari Number |
Kesimpulan
Symbol dan BigInt adalah tipe data lanjutan yang menambah fleksibilitas JavaScript.
- Symbol berguna untuk membuat identitas unik, mencegah konflik antar properti, dan mengatur perilaku khusus pada objek.
- BigInt memungkinkan kita bekerja dengan angka bulat yang sangat besar tanpa kehilangan presisi.
Dengan memahami kedua tipe data ini, pengembang dapat menulis kode yang lebih aman, jelas, dan siap menghadapi kebutuhan aplikasi modern, baik untuk manipulasi objek tingkat lanjut maupun perhitungan numerik berskala besar.