Mengenal Tipe Data JavaScript dan Cara Menggunakannya
Halo, Gabuters!
Pada artikel sebelumnya, kita sudah berkenalan dengan JavaScript. Kita belajar menjalankan kode melalui browser, menggunakan console.log(), membuat variabel, hingga melakukan perhitungan sederhana.
Kalau belum membacanya, Gabuters bisa mulai dari JavaScript Itu Apa? Membuat Website Jadi Interaktif.
Sekarang coba perhatikan kode berikut:
const jumlahArtikel = 10;const namaWebsite = "BapakGabut";const sudahTerbit = true;Ketiganya sama-sama menyimpan nilai dalam variabel. Tetapi nilai yang disimpan ternyata berbeda.
10 merupakan angka, "BapakGabut" merupakan teks, sedangkan true merupakan nilai logika.
Perbedaan inilah yang disebut tipe data.
Kenapa kita perlu memahaminya?
Karena tipe data menentukan bagaimana JavaScript memperlakukan sebuah nilai.
Misalnya, angka 10 bisa digunakan untuk perhitungan. Tetapi teks "10" tidak selalu diperlakukan dengan cara yang sama.
Bahkan, dua nilai yang terlihat mirip bisa menghasilkan hasil yang mengejutkan ketika digunakan bersama operator tertentu.
Pada artikel ini, kita akan mengenal tipe data JavaScript, cara memeriksanya, mengubahnya, dan memahami beberapa perilaku yang sering membuat pemula kebingungan.
1. Apa Itu Tipe Data?
Tipe data adalah pengelompokan nilai berdasarkan karakteristik dan perilakunya.
Dalam JavaScript, tipe data melekat pada nilai, bukan dikunci secara permanen pada variabel.
Contohnya:
let data = 10;
console.log(data);
data = "Sepuluh";
console.log(data);Hasilnya:
10SepuluhAwalnya, variabel data menyimpan angka. Setelah itu, variabel yang sama menyimpan teks.
Hal tersebut diperbolehkan karena JavaScript merupakan bahasa dengan sistem tipe dinamis (dynamically typed).
Namun, bukan berarti kita sebaiknya sering mengubah tipe nilai dalam satu variabel.
Jika suatu variabel awalnya digunakan untuk menyimpan jumlah artikel, lalu tiba-tiba berisi nama pengguna, kode kita bisa menjadi sulit dipahami.
Jadi, walaupun JavaScript fleksibel, kita tetap perlu menjaga konsistensi penggunaan variabel.
2. Mengenal Tipe Data Primitif dan Object
Secara umum, nilai dalam JavaScript dapat dibagi menjadi dua kelompok:
- Primitive, yaitu nilai dasar seperti teks, angka, dan boolean.
- Object, yaitu nilai yang dapat menyimpan kumpulan properti dan digunakan untuk membentuk struktur data yang lebih kompleks.
JavaScript memiliki tujuh tipe data primitif.
| Tipe Data | Contoh | Kegunaan Umum |
|---|---|---|
| String | "BapakGabut" | Menyimpan teks |
| Number | 10, 3.14 | Menyimpan angka |
| Boolean | true, false | Menyimpan nilai logika |
| Undefined | undefined | Menandai nilai yang belum tersedia |
| Null | null | Menandai ketiadaan nilai secara sengaja |
| BigInt | 123n | Menyimpan bilangan bulat sangat besar |
| Symbol | Symbol("id") | Membuat nilai identitas yang unik |
Selain tipe-tipe tersebut, ada tipe object.
Contohnya:
const artikel = { judul: "Belajar JavaScript", jumlahPembaca: 100};Array dan function juga berkaitan dengan object dalam JavaScript, meskipun typeof untuk function memiliki hasil khusus.
Kita akan membahas object dan array secara lebih mendalam pada artikel tersendiri.
Untuk sekarang, mari mulai dari tipe data yang paling sering digunakan.
3. String: Menyimpan Teks
String digunakan untuk menyimpan teks.
Contohnya:
const namaWebsite = "BapakGabut";const kategori = 'Programming';
console.log(namaWebsite);console.log(kategori);String dapat ditulis menggunakan tanda petik dua ("), tanda petik satu ('), atau backtick (`).
Contoh:
const teksPertama = "Halo, Gabuters!";const teksKedua = 'Belajar JavaScript';const teksKetiga = `Selamat datang`;Ketiganya merupakan string.
Menggabungkan string
Kita bisa menggabungkan string menggunakan operator +.
const namaDepan = "Bapak";const namaBelakang = "Gabut";
console.log(namaDepan + namaBelakang);Hasilnya:
BapakGabutKalau ingin menambahkan spasi:
console.log(namaDepan + " " + namaBelakang);Hasilnya:
Bapak GabutMenggunakan template literal
Cara lain yang sering lebih mudah dibaca adalah menggunakan template literal.
const nama = "Gabuters";const jumlahArtikel = 10;
console.log( `Halo, ${nama}! Ada ${jumlahArtikel} artikel untuk dibaca.`);Hasilnya:
Halo, Gabuters! Ada 10 artikel untuk dibaca.Template literal juga bisa digunakan untuk membuat teks yang terdiri dari beberapa baris.
const pesan = `Halo, Gabuters!Selamat datang di BapakGabut.Semoga betah belajar di sini.`;
console.log(pesan);Menghitung panjang string
String memiliki properti length.
const nama = "BapakGabut";
console.log(nama.length);Hasilnya:
10length menghitung panjang string dalam satuan UTF-16 code unit. Untuk teks sederhana seperti contoh tersebut, hasilnya sesuai dengan jumlah karakter yang terlihat.
Pada teks tertentu, seperti beberapa emoji, jumlah karakter yang terlihat dan nilai length bisa berbeda.
4. Number: Menyimpan Angka
Tipe number digunakan untuk menyimpan angka.
Contohnya:
const jumlahArtikel = 10;const hargaDomain = 150000;const nilaiRataRata = 87.5;Dalam JavaScript, bilangan bulat dan bilangan desimal umumnya menggunakan tipe yang sama, yaitu number.
Kita bisa melakukan operasi matematika terhadapnya.
const artikelHTML = 5;const artikelCSS = 6;
const totalArtikel = artikelHTML + artikelCSS;
console.log(totalArtikel);Hasilnya:
11Perbedaan angka dan teks angka
Sekarang coba:
const angka = 10;const teksAngka = "10";
console.log(angka + 5);console.log(teksAngka + 5);Hasilnya:
15105Kenapa berbeda?
Karena ketika salah satu operand berupa string, operator + dapat digunakan untuk menggabungkan teks.
Pada contoh kedua, angka 5 dikonversi menjadi teks lalu digabungkan dengan "10".
Hasilnya adalah string "105", bukan angka seratus lima.
Ini salah satu alasan kita harus memahami tipe data.
Mengenal NaN
JavaScript mempunyai nilai khusus bernama NaN, singkatan dari Not-a-Number.
Contohnya:
const hasil = Number("BapakGabut");
console.log(hasil);Hasilnya:
NaNKarena teks "BapakGabut" tidak dapat dikonversi menjadi angka.
Menariknya:
console.log(typeof NaN);Hasilnya:
numberNaN termasuk dalam tipe number, walaupun digunakan untuk menandai hasil numerik yang tidak valid.
Untuk memeriksa NaN, gunakan:
console.log(Number.isNaN(Number("BapakGabut")));Hasilnya:
trueAngka desimal dan presisi
Coba jalankan:
console.log(0.1 + 0.2);Hasilnya:
0.30000000000000004Ini bukan berarti JavaScript tidak bisa berhitung.
JavaScript menggunakan representasi floating-point biner untuk nilai number, sehingga beberapa pecahan desimal tidak dapat direpresentasikan secara tepat.
Perilaku serupa juga dapat ditemukan pada bahasa pemrograman lain yang menggunakan representasi tersebut.
Untuk sekarang, cukup pahami bahwa perhitungan desimal tertentu membutuhkan perhatian khusus, terutama jika digunakan untuk nilai uang.
5. Boolean: Benar atau Salah
Boolean hanya mempunyai dua kemungkinan nilai:
truefalseContohnya:
const sudahLogin = true;const artikelDraft = false;
console.log(sudahLogin);console.log(artikelDraft);Boolean sering digunakan untuk menentukan kondisi suatu aplikasi.
Misalnya:
const sudahLogin = true;
if (sudahLogin) { console.log("Selamat datang kembali!");}Karena sudahLogin bernilai true, pesan akan ditampilkan.
Kalau nilainya false, blok kode di dalam if tidak dijalankan.
Kita akan mempelajari if, else, dan percabangan secara mendalam pada artikel JavaScript #3.
Untuk saat ini, cukup pahami bahwa boolean digunakan untuk merepresentasikan kondisi benar atau salah.
6. Undefined: Nilai yang Belum Tersedia
Sekarang perhatikan:
let namaPengguna;
console.log(namaPengguna);Hasilnya:
undefinedVariabel tersebut sudah dideklarasikan, tetapi kita belum memberikan nilai.
Karena itu, ketika dibaca, nilainya adalah undefined.
Kita juga dapat menemukannya ketika mencoba membaca properti yang tidak tersedia pada sebuah object.
const artikel = { judul: "Belajar JavaScript"};
console.log(artikel.penulis);Hasilnya:
undefinedProperti penulis tidak tersedia pada object tersebut.
Namun, perlu diingat bahwa tidak semua penggunaan nama yang belum dikenal akan menghasilkan undefined.
Contohnya:
console.log(namaVariabelYangTidakAda);Kode tersebut justru menghasilkan ReferenceError karena variabelnya tidak pernah dideklarasikan.
7. Null: Sengaja Tidak Memiliki Nilai
Sekilas, null terlihat mirip dengan undefined.
Tetapi penggunaannya berbeda.
null biasanya diberikan secara sengaja untuk menunjukkan bahwa suatu nilai tidak ada.
Contohnya:
const artikelTerpilih = null;
console.log(artikelTerpilih);Kita sengaja memberikan nilai null karena belum ada artikel yang dipilih.
Bandingkan:
let artikelPertama;const artikelKedua = null;artikelPertama belum diberi nilai sehingga bernilai undefined.
Sementara itu, artikelKedua secara eksplisit diberi nilai null.
Keanehan typeof null
Coba:
console.log(typeof null);Hasilnya:
objectIni merupakan perilaku historis JavaScript yang tetap dipertahankan untuk kompatibilitas.
Walaupun typeof null menghasilkan "object", null sebenarnya merupakan nilai primitif, bukan object.
Jadi, jangan menggunakan typeof nilai === "object" saja untuk memastikan suatu nilai benar-benar object yang bukan null.
8. BigInt: Untuk Bilangan Bulat Sangat Besar
Biasanya, kita menggunakan number untuk menyimpan angka.
Namun, number mempunyai batas ketelitian untuk bilangan bulat.
Batas bilangan bulat aman terbesar dapat dilihat melalui:
console.log(Number.MAX_SAFE_INTEGER);Hasilnya:
9007199254740991Jika kita perlu menggunakan bilangan bulat yang lebih besar secara tepat, JavaScript menyediakan bigint.
Contohnya:
const angkaBesar = 9007199254740993n;
console.log(angkaBesar);console.log(typeof angkaBesar);Hasil yang ditampilkan Console secara umum:
9007199254740993nbigintHuruf n di akhir menunjukkan bahwa nilai tersebut adalah BigInt.
BigInt juga dapat dibuat menggunakan fungsi BigInt().
const angkaBesar = BigInt("9007199254740993");Menggunakan string seperti contoh tersebut membantu mempertahankan ketepatan bilangan bulat besar.
BigInt tidak bisa langsung dicampur dengan number
Contohnya:
const angkaBesar = 10n;const angkaBiasa = 5;
console.log(angkaBesar + angkaBiasa);Kode tersebut menghasilkan TypeError.
Kita perlu menggunakan tipe yang sesuai untuk operasi aritmatika.
console.log(10n + 5n);Hasilnya:
15nBigInt tidak digunakan untuk semua angka.
Untuk perhitungan biasa, termasuk angka desimal, kita umumnya tetap menggunakan number.
9. Symbol: Membuat Nilai yang Unik
Tipe data primitif berikutnya adalah symbol.
Symbol digunakan untuk membuat nilai yang unik.
Contohnya:
const idPertama = Symbol("id");const idKedua = Symbol("id");
console.log(idPertama === idKedua);Hasilnya:
falseWalaupun keduanya menggunakan deskripsi "id", setiap pemanggilan Symbol() menghasilkan symbol yang berbeda.
Symbol sering digunakan sebagai key properti object ketika kita membutuhkan identitas khusus yang tidak berbenturan dengan key string biasa.
Contohnya:
const idRahasia = Symbol("id");
const artikel = { judul: "Belajar JavaScript", [idRahasia]: 123};
console.log(artikel[idRahasia]);Hasilnya:
123Perhatikan tanda kurung siku pada [idRahasia].
Itu digunakan agar nilai symbol menjadi key properti object.
Untuk pembelajaran dasar, Gabuters belum perlu sering menggunakan Symbol.
Yang penting, kita tahu bahwa tipe data ini tersedia dan memiliki karakteristik nilai yang unik.
10. Object: Menyimpan Data yang Lebih Terstruktur
Setelah mengenal tujuh tipe primitif, sekarang kita lihat contoh object.
const artikel = { judul: "Belajar JavaScript", kategori: "Programming", sudahTerbit: true};
console.log(artikel.judul);console.log(artikel.kategori);Hasilnya:
Belajar JavaScriptProgrammingObject dapat menyimpan beberapa properti dalam satu nilai.
Berbeda dari nilai primitif, object memiliki identitas atau referensi.
Contohnya:
const artikelPertama = { judul: "JavaScript"};
const artikelKedua = { judul: "JavaScript"};
console.log(artikelPertama === artikelKedua);Hasilnya:
falseWalaupun isi keduanya terlihat sama, keduanya merupakan dua object yang berbeda.
Sebaliknya:
const artikelPertama = { judul: "JavaScript"};
const artikelKedua = artikelPertama;
console.log(artikelPertama === artikelKedua);Hasilnya:
trueKarena kedua variabel tersebut merujuk pada object yang sama.
Konsep referensi ini penting ketika kita mulai mengolah array dan object.
Namun, kita akan membahasnya lebih lanjut pada JavaScript #6.
11. Mengenal Operator typeof
Bagaimana cara mengetahui tipe sebuah nilai?
JavaScript menyediakan operator typeof.
Contohnya:
console.log(typeof "BapakGabut");console.log(typeof 10);console.log(typeof true);console.log(typeof undefined);console.log(typeof null);console.log(typeof 10n);console.log(typeof Symbol("id"));console.log(typeof {});Hasilnya:
stringnumberbooleanundefinedobjectbigintsymbolobjectAda dua hal yang perlu diperhatikan.
Pertama, typeof null menghasilkan "object" karena alasan historis yang sudah kita bahas.
Kedua, typeof tidak bisa digunakan untuk membedakan semua jenis object secara rinci.
Misalnya:
console.log(typeof []);console.log(typeof {});Keduanya menghasilkan:
objectobjectUntuk memeriksa apakah suatu nilai merupakan array, kita dapat menggunakan:
console.log(Array.isArray([]));Hasilnya:
trueAda juga hasil khusus untuk function:
console.log(typeof function () {});Hasilnya:
functionWalaupun function termasuk object yang dapat dipanggil, typeof memberikan hasil khusus "function".
12. Konversi Tipe Data
Dalam aplikasi nyata, kita sering menerima data dalam bentuk string.
Contohnya, nilai yang diketik pengguna pada input HTML biasanya dibaca sebagai string.
Padahal, kita mungkin membutuhkan angka untuk melakukan perhitungan.
Karena itu, kita perlu memahami konversi tipe data.
Mengubah string menjadi number
Gunakan Number().
const jumlah = "10";
const jumlahAngka = Number(jumlah);
console.log(jumlahAngka + 5);Hasilnya:
15Bandingkan jika tidak dikonversi:
const jumlah = "10";
console.log(jumlah + 5);Hasilnya:
105Mengubah number menjadi string
Gunakan String().
const jumlah = 10;
const jumlahTeks = String(jumlah);
console.log(typeof jumlahTeks);Hasilnya:
stringMengubah nilai menjadi boolean
Gunakan Boolean().
console.log(Boolean(1));console.log(Boolean(0));console.log(Boolean("Halo"));console.log(Boolean(""));Hasilnya:
truefalsetruefalsePerhatikan bahwa Boolean() tidak memeriksa apakah teks berisi kata "true" atau "false".
Contohnya:
console.log(Boolean("false"));Hasilnya justru:
trueKarena "false" merupakan string yang tidak kosong.
Ini membawa kita pada konsep berikutnya.
13. Truthy dan Falsy
Dalam JavaScript, tidak semua kondisi harus menggunakan nilai boolean secara langsung.
Beberapa nilai dapat diperlakukan sebagai true atau false ketika digunakan dalam konteks boolean.
Nilai yang diperlakukan sebagai true disebut truthy.
Nilai yang diperlakukan sebagai false disebut falsy.
Contoh nilai falsy:
| Nilai | Keterangan |
|---|---|
false | Boolean false |
0 | Angka nol |
-0 | Angka negatif nol |
0n | BigInt nol |
"" | String kosong |
null | Nilai null |
undefined | Nilai undefined |
NaN | Nilai numerik tidak valid |
Selain nilai-nilai tersebut, ada juga kasus khusus historis pada browser, yaitu document.all, yang bersifat falsy.
Untuk pembelajaran sehari-hari, kita akan lebih sering berhadapan dengan nilai-nilai pada tabel.
Sekarang coba:
console.log(Boolean("0"));console.log(Boolean("false"));console.log(Boolean([]));console.log(Boolean({}));Hasilnya:
truetruetruetrueMengapa?
Karena string yang tidak kosong bersifat truthy, begitu juga array dan object, termasuk ketika keduanya kosong.
Konsep ini akan sangat berguna ketika kita mempelajari percabangan.
Namun, kita harus berhati-hati.
Jika suatu nilai bisa berupa angka 0 yang valid, jangan otomatis menganggap nilai falsy berarti datanya tidak tersedia.
14. Perbedaan == dan ===
Sekarang kita bahas satu perilaku JavaScript yang sering menimbulkan kebingungan.
Coba:
console.log(10 == "10");console.log(10 === "10");Hasilnya:
truefalseKenapa berbeda?
Operator == membandingkan nilai menggunakan aturan loose equality, yang pada kombinasi tipe tertentu dapat melakukan konversi tipe.
Sedangkan === menggunakan strict equality, tanpa melakukan konversi tipe antara number dan string seperti contoh tersebut.
Karena itu:
10 == "10"Menghasilkan true.
Tetapi:
10 === "10"Menghasilkan false, karena tipe keduanya berbeda.
Dalam penulisan JavaScript modern, penggunaan === umumnya lebih disarankan agar perbandingan lebih mudah dipahami dan tidak bergantung pada konversi tipe yang tidak kita sadari.
Namun, perlu diketahui bahwa === juga memiliki aturan tersendiri, terutama untuk object dan nilai khusus seperti NaN.
Kita akan menggunakan operator perbandingan ini lebih banyak ketika mempelajari percabangan pada artikel berikutnya.
15. Praktik: Mengolah Data Artikel dari Input
Sekarang kita gabungkan beberapa konsep yang sudah dipelajari.
Bayangkan kita menerima jumlah artikel terbit dan jumlah artikel draft dari sebuah formulir.
Untuk latihan ini, kita simulasikan nilai input sebagai string.
const inputArtikelTerbit = "8";const inputArtikelDraft = "5";
console.log(typeof inputArtikelTerbit);console.log(typeof inputArtikelDraft);Hasilnya:
stringstringKalau langsung dijumlahkan:
const totalArtikel = inputArtikelTerbit + inputArtikelDraft;
console.log(totalArtikel);Hasilnya:
85Padahal yang kita inginkan adalah 13.
Sekarang kita perbaiki menggunakan konversi tipe data.
const inputArtikelTerbit = "8";const inputArtikelDraft = "5";
const artikelTerbit = Number(inputArtikelTerbit);const artikelDraft = Number(inputArtikelDraft);
const totalArtikel = artikelTerbit + artikelDraft;
console.log(`Artikel terbit: ${artikelTerbit}`);console.log(`Artikel draft: ${artikelDraft}`);console.log(`Total artikel: ${totalArtikel}`);Hasilnya:
Artikel terbit: 8Artikel draft: 5Total artikel: 13Bagaimana jika input ternyata bukan angka?
const inputArtikelTerbit = "delapan";
const artikelTerbit = Number(inputArtikelTerbit);
console.log(artikelTerbit);console.log(Number.isNaN(artikelTerbit));Hasilnya:
NaNtrueArtinya, kita tidak bisa langsung menganggap semua input pengguna valid.
Pada aplikasi nyata, kita perlu melakukan validasi sebelum data digunakan.
Nanti, ketika mempelajari DOM dan event, kita akan mencoba membaca input dari formulir HTML dan memvalidasinya secara langsung.
16. Kesalahan Umum Saat Menggunakan Tipe Data
Menganggap semua angka dalam teks sebagai number
const harga = "10000";
console.log(harga + 5000);Hasilnya:
100005000Jika ingin melakukan penjumlahan numerik, lakukan konversi terlebih dahulu.
Menganggap string “false” sebagai false
console.log(Boolean("false"));Hasilnya:
trueString tersebut tidak kosong, sehingga bersifat truthy.
Menganggap array kosong sebagai falsy
console.log(Boolean([]));Hasilnya:
trueArray merupakan object dan bersifat truthy meskipun tidak memiliki elemen.
Menggunakan typeof untuk memeriksa null
console.log(typeof null);Hasilnya:
objectUntuk memeriksa apakah nilai benar-benar null, gunakan:
const data = null;
console.log(data === null);Hasilnya:
trueMembandingkan object hanya berdasarkan isi
console.log({} === {});Hasilnya:
falseKedua object tersebut merupakan dua referensi yang berbeda.
Jika kita ingin membandingkan isi object, diperlukan pendekatan yang sesuai dengan struktur datanya.
17. Latihan Mandiri
Sekarang giliran Gabuters mencoba.
Buat file script.js untuk menyimpan data berikut:
const namaWebsite = "BapakGabut";const artikelTerbit = "12";const artikelDraft = "4";const sudahOnline = true;const artikelPilihan = null;Kemudian lakukan latihan berikut:
- Tampilkan tipe data setiap variabel menggunakan
typeof. - Ubah
artikelTerbitdanartikelDraftmenjadi number. - Hitung total seluruh artikel.
- Tampilkan pesan menggunakan template literal.
- Periksa apakah
artikelPilihanbernilainullmenggunakan===. - Coba ubah
artikelDraftmenjadi"empat"dan amati hasil konversinya.
Sebagai tantangan tambahan, coba prediksi hasil kode berikut sebelum menjalankannya:
console.log(5 + "5");console.log(5 - "5");console.log(Boolean("0"));console.log(Boolean(0));console.log(null === undefined);console.log(null == undefined);Jangan hanya menghafal hasilnya.
Coba pahami mengapa JavaScript menghasilkan nilai tersebut.
18. Penutup
Pada artikel ini, kita sudah mengenal tujuh tipe data primitif JavaScript: string, number, boolean, undefined, null, bigint, dan symbol.
Kita juga telah melihat bagaimana object berbeda dari nilai primitif, mengenal operator typeof, melakukan konversi tipe data, serta memahami konsep truthy dan falsy.
Yang paling penting, kita belajar bahwa nilai yang terlihat mirip belum tentu memiliki tipe dan perilaku yang sama.
Pemahaman ini akan sangat membantu ketika kita mulai membuat logika program.
Pada artikel berikutnya, kita akan membahas Belajar Percabangan JavaScript: if, else, dan switch.
Di sana, kita akan menggunakan tipe data, operator perbandingan, dan boolean untuk membuat program yang dapat mengambil keputusan berdasarkan kondisi tertentu.
Sampai jumpa di artikel berikutnya, Gabuters!
JavaScript
SelesaiBagikan Artikel
Buat poster berbagi atau salin tautan artikel ini.
Lanjut membaca
Coba jalur lain
Pilihan konsisten dari artikel lain
Terakhir diperbarui pada , 21 hari yang lalu
Sebagian konten mungkin sudah tidak berlaku