JavaScript adalah bahasa dengan dynamic typing—artinya tipe data tidak perlu ditentukan sejak awal, dan sebuah variabel dapat berubah tipe sewaktu-waktu.
Untuk menulis kode yang aman, rapi, dan bebas bug, memahami tipe data adalah langkah krusial.
JavaScript memiliki dua kategori besar tipe data:
- (1) Primitive types
- (2) Reference types
Masing-masing memiliki karakteristik, cara kerja, dan konsekuensi berbeda. Bab ini membahas semuanya secara mendalam.
Contents
1. Primitive Types
Primitive adalah tipe data sederhana, immutable, dan disimpan langsung pada memori (stack).
JavaScript memiliki 7 primitive type:
A. String
Digunakan untuk teks.
let name = "Alice";
let greet = `Hello, ${name}`;
Ciri-ciri:
- Menggunakan
"...",'...', atau`...` - Bersifat immutable → teks tidak bisa diubah, selalu membuat salinan baru ketika dimanipulasi
B. Number
JavaScript memiliki satu jenis number untuk integer dan floating point.
let a = 10;
let b = 10.5;
Kekhususan number:
- Menggunakan format IEEE 754
- Bisa menghasilkan
NaN,Infinity,-Infinity
C. Boolean
Hanya bernilai:
true
false
Dipakai untuk kondisi dan logika.
D. Null
Mewakili “nilai kosong” yang diset oleh programmer.
let data = null;
Menandakan bahwa variabel memiliki nilai, tetapi kosong.
E. Undefined
Muncul ketika variabel belum diberi nilai.
let x;
console.log(x); // undefined
F. Symbol
Tipe unik untuk membuat identifier yang tidak dapat ditiru.
let id = Symbol("id");
Digunakan untuk properti unik, misalnya pada library atau internal data.
G. BigInt
Digunakan untuk bilangan sangat besar (di luar limit Number).
let big = 123456789012345678901234567890n;
Ditandai dengan akhiran n.
2. Reference Types
Reference types adalah tipe data yang disimpan di heap, dan variabel menyimpan referensi ke lokasi tersebut.
Kategori utamanya:
A. Object
Struktur data kompleks dalam format key–value.
let user = {
name: "Bob",
age: 30
};
B. Array
Objek khusus untuk menyimpan daftar/collection.
let items = [1, 2, 3];
C. Function
Function juga merupakan object.
function sayHi() {
console.log("Hi!");
}
Function sering dianggap first-class object karena dapat disimpan sebagai variabel, argumen, atau return value.
3. Mutable vs Immutable
Memahami perbedaan ini sangat penting:
A. Primitive → Immutable
Contoh:
let a = "Hello";
a[0] = "J";
console.log(a); // tetap "Hello"
Jika sebuah string “diubah”, sebenarnya JavaScript membuat nilai baru, bukan memodifikasi nilai lama.
B. Reference Types → Mutable
Object, array, dan function dapat dimodifikasi tanpa membuat referensi baru:
let person = { name: "Anna" };
person.name = "Bella"; // valid
let nums = [1, 2];
nums.push(3); // valid
Ini sering menjadi sumber bug karena dua variabel dapat menunjuk ke objek yang sama:
let a = { x: 1 };
let b = a;
b.x = 99;
console.log(a.x); // 99 (karena referensinya sama)
4. typeof dan Masalah-Masalahnya
Operator typeof digunakan untuk mengecek tipe data, tetapi memiliki beberapa hasil aneh.
Sintaks:
typeof nilai
Contoh umum:
typeof "Hello" // "string"
typeof 10 // "number"
typeof true // "boolean"
typeof undefined // "undefined"
typeof Symbol() // "symbol"
typeof 10n // "bigint"
Masalah 1: typeof null → "object"
Ini adalah bug berusia puluhan tahun dalam JavaScript.
typeof null; // "object" (bug, tapi dibiarkan demi kompatibilitas)
Seharusnya hasilnya “null”, tetapi tidak bisa diperbaiki tanpa merusak jutaan situs.
Masalah 2: Array terdeteksi sebagai “object”
typeof [1,2,3]; // "object"
Untuk mengecek array, gunakan:
Array.isArray(arr); // true
Masalah 3: Function adalah “function”, tapi secara teknis object
typeof function(){} // "function"
Hasil “function” sebenarnya hanya pengecualian, karena function adalah objek callable.
Masalah 4: typeof NaN → “number”
typeof NaN; // "number"
Ini adalah konsekuensi dari sistem number IEEE 754.
Untuk mengecek NaN, gunakan:
Number.isNaN(value)
Ringkasan Cepat
| Tipe Data | Kategori | Deskripsi |
|---|---|---|
| string | primitive | teks |
| number | primitive | angka |
| boolean | primitive | true/false |
| null | primitive | nilai kosong |
| undefined | primitive | belum diberi nilai |
| symbol | primitive | identifier unik |
| bigint | primitive | angka besar |
| object | reference | data kompleks |
| array | reference | list/collection |
| function | reference | dapat dipanggil |