2192 kata
11 menit

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:

10
Sepuluh

Awalnya, 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:

  1. Primitive, yaitu nilai dasar seperti teks, angka, dan boolean.
  2. Object, yaitu nilai yang dapat menyimpan kumpulan properti dan digunakan untuk membentuk struktur data yang lebih kompleks.

JavaScript memiliki tujuh tipe data primitif.

Tipe DataContohKegunaan Umum
String"BapakGabut"Menyimpan teks
Number10, 3.14Menyimpan angka
Booleantrue, falseMenyimpan nilai logika
UndefinedundefinedMenandai nilai yang belum tersedia
NullnullMenandai ketiadaan nilai secara sengaja
BigInt123nMenyimpan bilangan bulat sangat besar
SymbolSymbol("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:

BapakGabut

Kalau ingin menambahkan spasi:

console.log(namaDepan + " " + namaBelakang);

Hasilnya:

Bapak Gabut

Menggunakan 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:

10

length 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:

11

Perbedaan angka dan teks angka#

Sekarang coba:

const angka = 10;
const teksAngka = "10";
console.log(angka + 5);
console.log(teksAngka + 5);

Hasilnya:

15
105

Kenapa 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:

NaN

Karena teks "BapakGabut" tidak dapat dikonversi menjadi angka.

Menariknya:

console.log(typeof NaN);

Hasilnya:

number

NaN termasuk dalam tipe number, walaupun digunakan untuk menandai hasil numerik yang tidak valid.

Untuk memeriksa NaN, gunakan:

console.log(Number.isNaN(Number("BapakGabut")));

Hasilnya:

true

Angka desimal dan presisi#

Coba jalankan:

console.log(0.1 + 0.2);

Hasilnya:

0.30000000000000004

Ini 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:

true
false

Contohnya:

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:

undefined

Variabel 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:

undefined

Properti 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:

object

Ini 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:

9007199254740991

Jika 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:

9007199254740993n
bigint

Huruf 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:

15n

BigInt 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:

false

Walaupun 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:

123

Perhatikan 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 JavaScript
Programming

Object 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:

false

Walaupun isi keduanya terlihat sama, keduanya merupakan dua object yang berbeda.

Sebaliknya:

const artikelPertama = {
judul: "JavaScript"
};
const artikelKedua = artikelPertama;
console.log(artikelPertama === artikelKedua);

Hasilnya:

true

Karena 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:

string
number
boolean
undefined
object
bigint
symbol
object

Ada 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:

object
object

Untuk memeriksa apakah suatu nilai merupakan array, kita dapat menggunakan:

console.log(Array.isArray([]));

Hasilnya:

true

Ada juga hasil khusus untuk function:

console.log(typeof function () {});

Hasilnya:

function

Walaupun 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:

15

Bandingkan jika tidak dikonversi:

const jumlah = "10";
console.log(jumlah + 5);

Hasilnya:

105

Mengubah number menjadi string#

Gunakan String().

const jumlah = 10;
const jumlahTeks = String(jumlah);
console.log(typeof jumlahTeks);

Hasilnya:

string

Mengubah nilai menjadi boolean#

Gunakan Boolean().

console.log(Boolean(1));
console.log(Boolean(0));
console.log(Boolean("Halo"));
console.log(Boolean(""));

Hasilnya:

true
false
true
false

Perhatikan bahwa Boolean() tidak memeriksa apakah teks berisi kata "true" atau "false".

Contohnya:

console.log(Boolean("false"));

Hasilnya justru:

true

Karena "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:

NilaiKeterangan
falseBoolean false
0Angka nol
-0Angka negatif nol
0nBigInt nol
""String kosong
nullNilai null
undefinedNilai undefined
NaNNilai 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:

true
true
true
true

Mengapa?

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:

true
false

Kenapa 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:

string
string

Kalau langsung dijumlahkan:

const totalArtikel =
inputArtikelTerbit + inputArtikelDraft;
console.log(totalArtikel);

Hasilnya:

85

Padahal 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: 8
Artikel draft: 5
Total artikel: 13

Bagaimana jika input ternyata bukan angka?

const inputArtikelTerbit = "delapan";
const artikelTerbit = Number(inputArtikelTerbit);
console.log(artikelTerbit);
console.log(Number.isNaN(artikelTerbit));

Hasilnya:

NaN
true

Artinya, 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:

100005000

Jika ingin melakukan penjumlahan numerik, lakukan konversi terlebih dahulu.

Menganggap string “false” sebagai false#

console.log(Boolean("false"));

Hasilnya:

true

String tersebut tidak kosong, sehingga bersifat truthy.

Menganggap array kosong sebagai falsy#

console.log(Boolean([]));

Hasilnya:

true

Array merupakan object dan bersifat truthy meskipun tidak memiliki elemen.

Menggunakan typeof untuk memeriksa null#

console.log(typeof null);

Hasilnya:

object

Untuk memeriksa apakah nilai benar-benar null, gunakan:

const data = null;
console.log(data === null);

Hasilnya:

true

Membandingkan object hanya berdasarkan isi#

console.log({} === {});

Hasilnya:

false

Kedua 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:

  1. Tampilkan tipe data setiap variabel menggunakan typeof.
  2. Ubah artikelTerbit dan artikelDraft menjadi number.
  3. Hitung total seluruh artikel.
  4. Tampilkan pesan menggunakan template literal.
  5. Periksa apakah artikelPilihan bernilai null menggunakan ===.
  6. Coba ubah artikelDraft menjadi "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

Selesai

Bagian 2 dari 8Tulisan ini bagian dari seri

Bagikan Artikel

Buat poster berbagi atau salin tautan artikel ini.

Lanjut membaca

Bacaan terkait

Berdasarkan tag dan kategori yang sama

Coba jalur lain

Pilihan konsisten dari artikel lain