Episode ini membedah tiga bahan bangunan paling dasar JavaScript: deklarasi variabel dengan let dan const, tujuh tipe data primitif, serta operator aritmetika, perbandingan, dan logika. Kalian juga mempelajari coercion tipe yang sering menjadi sumber bug.

Semua program JavaScript dibangun dari cara kalian menyimpan nilai dan mengolah nilai. Episode 2 membahas keduanya secara menyeluruh: deklarasi variabel dengan let dan const, tujuh tipe data primitif yang menjadi blok penyusun bahasa ini, dan operator yang dipakai untuk menghitung, membandingkan, serta menggabungkan nilai.
Episode ini mungkin terlihat "sepele", tapi sebagian besar bug di dunia JavaScript lahir dari kesalahpahaman kecil di sini: salah memilih let versus const, lupa bahwa null dan undefined itu berbeda, atau terjebak coercion tipe yang tidak terduga. Kalau fondasi ini kuat, episode berikutnya akan berjalan mulus.
Kalian akan menjalankan setiap contoh di Node.js atau Console DevTools. Jangan menghafal, tapi biasakan mengamati output — JavaScript sangat mudah dieksperimen.
let mendeklarasikan variabel yang nilainya bisa di-assign ulang di kemudian hari:
let umur = 25;
console.log(umur);
umur = 26;
console.log(umur);Variabel umur dimulai dengan 25, lalu diubah menjadi 26. let umur = 25 boleh di-assign ulang selama masih dalam scope yang sama. Ini pilihan tepat ketika nilai memang harus berubah, misalnya penghitung loop atau state yang dinamis.
const mendeklarasikan variabel yang nilainya tidak bisa di-assign ulang. Inilah pilihan default yang disarankan di JavaScript modern:
const nama = "Arman";
console.log(nama);Jika kalian mencoba menulis nama = "Budi", JavaScript akan melempar error TypeError: Assignment to constant variable. Kesalahan ini justru tanda yang baik — kompiler menangkap niat yang keliru. Di seluruh series ini, gunakan const kecuali kalian benar-benar butuh let.
var adalah cara deklarasi di era sebelum ES6. Dia memiliki perilaku scope yang aneh: var tidak menghormati blok, sehingga bisa bocor keluar dari block. Karena itu, praktik modern melarang var dan linter seperti ESLint akan menandainya sebagai error. Kalian akan melihat kenapa di episode 12 tentang scope.
JavaScript memiliki tujuh tipe data primitif — nilai yang bukan objek dan tidak punya method sendiri:
"Halo".42 dan 3.14.true atau false.n.Praktik terbaik untuk number yang berisi uang: jangan gunakan floating point untuk perhitungan finansial karena presisi desimalnya tidak eksak. Untuk angka integer besar di luar rentang safe integer, gunakan bigint:
const angkaBesar = 9007199254740993n;
console.log(angkaBesar + 2n);
console.log(typeof angkaBesar);9007199254740993n dengan akhiran n adalah bigint — aman untuk angka yang melebihi batas Number.MAX_SAFE_INTEGER. Operator typeof mengembalikan nama tipe sebuah nilai; coba jalankan typeof 42 untuk melihat hasilnya.
JavaScript mendukung operator aritmetika standar:
const a = 10;
const b = 3;
console.log(a + b);
console.log(a - b);
console.log(a * b);
console.log(a / b);
console.log(a % b);
console.log(a ** b);Hasilnya masing-masing: 13, 7, 30, 3.333, 1, dan 1000. Operator % menghitung sisa bagi, sedangkan ** adalah pangkat. Perhatikan bahwa 10 / 3 menghasilkan desimal — tidak ada pembagian integer di JavaScript.
Operator perbandingan mengembalikan boolean. Ada dua pasang yang wajib kalian bedakan:
== dan !=: perbandingan longgar yang memaksa tipe terlebih dahulu.=== dan !==: perbandingan ketat yang membandingkan tipe dan nilai sekaligus.Selalu gunakan === dan !==. Perbandingan longgar menghasilkan perilaku membingungkan seperti "5" == 5 yang mengembalikan true, padahal secara tipe keduanya berbeda. Dengan "5" === 5, hasilnya false — jauh lebih masuk akal.
Tiga operator logika utama: && (dan), || (atau), dan ! (negasi). Yang menarik di JavaScript, && dan || tidak selalu mengembalikan boolean — mereka mengembalikan salah satu operand:
const nama = "Arman";
const kosong = "";
console.log(nama || "Anonim");
console.log(kosong || "Anonim");|| mengembalikan nilai pertama yang truthy. Karena nama berisi string non-kosong, hasil pertama "Arman"; string kosong bersifat falsy, sehingga hasil kedua "Anonim". Pola nilai || "default" ini sangat umum dipakai untuk memberi nilai fallback.
Coercion adalah pemaksaan tipe otomatis yang dilakukan JavaScript. Terkadang membantu, sering kali mengejutkan:
console.log("5" + 3);
console.log("5" - 3);
console.log("5" * "3");Operator + menggabungkan string, sehingga "5" + 3 menghasilkan "53". Sebaliknya, - dan * memaksa operand menjadi number, sehingga menghasilkan 2 dan 15. Inkonsistensi inilah alasan kalian harus selalu memakai === dan memeriksa tipe data sebelum mengolah input pengguna.
Di era modern, penggabungan string memakai template literal — string yang dibuka dengan backtick dan menyisipkan ekspresi di dalam ${}:
const nama = "Arman";
const tahun = 2026;
console.log(`Halo ${nama}, sekarang tahun ${tahun}.`);Template literal juga mendukung string multibaris tanpa karakter escape. Halo ${nama} menyisipkan nilai variabel langsung ke dalam teks — pola yang jauh lebih bersih daripada merangkai dengan +.
Warning
Jangan campur + untuk menjumlahkan number dengan + untuk menggabungkan string dalam satu ekspresi. Coercion akan menghasilkan nilai yang tidak kalian harapkan. Selalu jadikan tipe eksplisit.
Episode 2 membangun fondasi sintaks JavaScript: let untuk nilai yang berubah, const sebagai pilihan default, tujuh tipe data primitif, operator aritmetika dan perbandingan, serta logika &&, ||, dan ! yang mengembalikan operand. Kalian juga memahami coercion tipe yang sering menjadi sumber bug.
Inti yang harus dibawa pulang:
const secara default dan let hanya jika nilai berubah.var; let dan const menghormati scope blok.=== dan !==, bukan == dan !=.|| dan && mengembalikan operand, bukan selalu boolean.Di episode 3 selanjutnya kita akan membahas kontrol alur — cara membuat program memutuskan jalan dengan if dan switch, serta mengulang pekerjaan dengan for, while, dan loop modern seperti for...of. Di sinilah kode mulai terasa seperti program sungguhan, bukan sekadar kumpulan baris.