Pusat Belajar JavaScript
Materi lengkap untuk siswa agar dapat membuat website menjadi lebih hidup dan interaktif.
-
Fondasi JavaScript
Bab 1: Pengenalan JavaScript - Membuat Website Menjadi Hidup
Selamat datang di dunia JavaScript! Jika HTML adalah kerangka sebuah rumah dan CSS adalah cat serta dekorasinya, maka JavaScript adalah sistem listrik, pipa air, dan semua perangkat elektronik di dalamnya. JavaScript-lah yang membuat rumah itu berfungsi dan bisa berinteraksi dengan penghuninya.
Apa itu JavaScript?
Sederhananya, JavaScript (sering disingkat JS) adalah bahasa pemrograman yang digunakan untuk membuat halaman web menjadi interaktif. Tanpa JavaScript, sebuah website akan menjadi “statis” atau diam—Anda hanya bisa membacanya seperti sebuah brosur. Dengan JavaScript, Anda bisa membuat website yang merespons aksi pengguna, seperti:
Menampilkan animasi saat di-scroll.
Mengirim pesan chat tanpa me-refresh halaman.
Menampilkan peringatan jika password yang dimasukkan salah.
Mengubah gambar di galeri saat tombol panah diklik.
JavaScript adalah bahasa client-side, yang artinya kode ini diunduh bersamaan dengan HTML dan CSS, lalu dijalankan oleh browser di komputer pengguna (klien), bukan di server.
Mengapa JavaScript Sangat Penting?
Di dunia pengembangan web modern, JavaScript bukan lagi pilihan, melainkan sebuah keharusan. Hampir semua website yang Anda kunjungi setiap hari menggunakan JavaScript.
💡 Fakta Keren: Menurut survei Stack Overflow (situs tanya jawab terbesar untuk programmer), JavaScript secara konsisten menjadi bahasa pemrograman paling populer di dunia selama lebih dari 10 tahun berturut-turut!
Beberapa alasan utamanya adalah:
Interaktivitas Pengguna: Memberikan pengalaman yang lebih kaya dan responsif.
Validasi Form: Memastikan data yang diinput pengguna sudah benar sebelum dikirim ke server, misalnya mengecek apakah email sudah valid.
Manipulasi DOM (Document Object Model): JavaScript bisa mengubah struktur, konten, dan gaya (CSS) dari sebuah halaman web secara real-time tanpa perlu memuat ulang halaman.
Ekosistem yang Luas: JavaScript memiliki banyak sekali library (seperti React, Vue) dan framework yang membantu developer membangun aplikasi web kompleks dengan lebih cepat dan efisien.
Fleksibel: Kini JavaScript tidak hanya berjalan di browser. Dengan teknologi seperti Node.js, JavaScript juga bisa digunakan di sisi server untuk membangun backend aplikasi.
Cara Menambahkan JavaScript ke Halaman Web
Ada tiga cara utama untuk menyisipkan kode JavaScript ke dalam file HTML.
1. Internal JavaScript (di dalam HTML)
Anda bisa menulis kode JavaScript langsung di dalam file HTML menggunakan tag <script>. Cara ini cocok untuk skrip yang sangat singkat dan hanya berlaku untuk satu halaman saja.
Contoh Kode: Simpan file ini sebagai internal.html dan buka dengan browser.
<!DOCTYPE html>
<html lang="id">
<head>
<title>Contoh JS Internal</title>
</head>
<body>
<h1>Halo, ini adalah website saya!</h1>
<p>Klik tombol di bawah untuk melihat keajaiban JavaScript.</p>
<button onclick="sapaPengguna()">Klik Saya!</button>
<script>
// Ini adalah sebuah fungsi di JavaScript
function sapaPengguna() {
alert('Halo! Anda baru saja menjalankan JavaScript.');
}
</script>
</body>
</html>
Saat tombol diklik, sebuah kotak dialog alert akan muncul. Inilah bukti bahwa JavaScript Anda berjalan.
2. External JavaScript (File Terpisah) – Cara Terbaik!
Ini adalah cara yang paling umum dan direkomendasikan di dunia kerja. Kodenya ditulis di file terpisah dengan ekstensi .js.
Keuntungan:
Rapi dan Terorganisir: Memisahkan logika (JS) dari struktur (HTML).
Bisa Digunakan Kembali (Reusable): Satu file
.jsbisa digunakan oleh banyak halaman HTML.Mempercepat Loading: Browser bisa menyimpan file
.jsdi cache, sehingga saat pengguna mengunjungi halaman lain yang menggunakan file yang sama, halaman akan dimuat lebih cepat.
Contoh Kode:
Langkah 1: Buat file bernama script.js
// File: script.js
function sapaPengguna() {
alert('Halo! Ini adalah JavaScript dari file eksternal.');
}
Langkah 2: Buat file HTML bernama eksternal.html dan panggil file .js tadi menggunakan tag <script> dengan atribut src.
<!DOCTYPE html>
<html lang="id">
<head>
<title>Contoh JS Eksternal</title>
</head>
<body>
<h1>Halo, ini adalah website saya!</h1>
<p>Tombol ini memanggil fungsi dari file script.js.</p>
<button onclick="sapaPengguna()">Klik Saya!</button>
<script src="script.js"></script>
</body>
</html>
Hasilnya akan sama persis dengan cara internal, tetapi kodenya jauh lebih rapi.
Implementasi Nyata di Dunia Kerja
Bagaimana konsep sederhana ini digunakan oleh perusahaan besar?
1. E-commerce (Contoh: Tokopedia, Shopee) 🛒 Saat Anda memasukkan barang ke keranjang belanja, perhatikan bahwa total harga dan jumlah barang di ikon keranjang langsung berubah tanpa halaman me-reload.
Implementasi: JavaScript mendeteksi klik pada tombol “Tambah ke Keranjang”, lalu mengubah teks total harga dan jumlah item (memanipulasi DOM) secara instan.
2. Media Sosial (Contoh: Instagram, Facebook) 👍 Ketika Anda menekan tombol “Like”, ikon hati langsung berubah warna dan jumlah like bertambah satu. Di belakang layar, JavaScript mengirim permintaan kecil ke server untuk mencatat like Anda, tanpa perlu memuat ulang seluruh halaman.
Implementasi: Menggunakan teknik bernama AJAX (Asynchronous JavaScript and XML) untuk berkomunikasi dengan server di latar belakang.
3. Aplikasi Peta (Contoh: Google Maps) 🗺️ Anda bisa menggeser peta, zoom in/out, dan mengklik sebuah lokasi untuk melihat detailnya dalam sebuah pop-up. Semua interaksi mulus ini dikendalikan sepenuhnya oleh JavaScript.
Implementasi: JavaScript menangani event seperti drag, scroll, dan click, lalu memperbarui tampilan peta secara dinamis.
Kesimpulan Bab Ini: Anda sekarang tahu bahwa JavaScript adalah “otak” yang memberikan kehidupan pada sebuah website. Anda juga sudah mempelajari cara kerjanya dan bagaimana menyisipkannya ke dalam halaman web. Di bab-bab selanjutnya, kita akan mulai menyelam lebih dalam ke komponen-komponen dasar JavaScript seperti variabel, tipe data, dan logika.
Bab 2: Variabel & Tipe Data - Wadah Informasi di JavaScript
Setelah tahu apa itu JavaScript, sekarang kita akan belajar cara “mengingat” atau menyimpan informasi di dalam program. Untuk melakukan ini, kita menggunakan Variabel.
Apa itu Variabel?
Bayangkan Anda memiliki beberapa kotak penyimpanan. Agar tidak lupa isinya, Anda memberi label pada setiap kotak. Misalnya: “Mainan”, “Buku”, “Alat Tulis”.
Di JavaScript, variabel adalah kotak penyimpanan (wadah) yang memiliki nama (label) untuk menyimpan sebuah nilai atau informasi. Nilai di dalam variabel ini bisa diubah-ubah seiring program berjalan.
Untuk membuat variabel di JavaScript modern, kita menggunakan kata kunci let dan const.
let: Digunakan untuk variabel yang nilainya bisa berubah.const: Digunakan untuk konstanta, yaitu variabel yang nilainya tidak akan pernah berubah setelah pertama kali diisi.
Contoh Kode:
// Menggunakan 'let' karena umur seseorang bisa bertambah
let umurSiswa = 13;
console.log(umurSiswa); // Output: 13
umurSiswa = 14; // Nilainya kita ubah
console.log(umurSiswa); // Output: 14
// Menggunakan 'const' karena tanggal lahir tidak akan pernah berubah
const tanggalLahir = "5 September 2012";
console.log(tanggalLahir);
// Jika kita coba ubah const, akan terjadi error!
// tanggalLahir = "10 Oktober 2012"; // Ini akan menyebabkan error
💡 Aturan Penamaan Variabel:
Harus diawali dengan huruf,
_, atau$. Tidak boleh diawali angka.Tidak boleh menggunakan spasi. Gunakan format camelCase (kata kedua dan seterusnya diawali huruf kapital), contoh:
namaSiswa,hargaBarang.Nama variabel bersifat case-sensitive, artinya
namadanNamadianggap dua variabel yang berbeda.
Apa itu Tipe Data?
Tipe data adalah jenis atau kategori informasi yang kita simpan di dalam variabel. JavaScript perlu tahu apakah informasi itu berupa teks, angka, atau logika benar/salah agar bisa memprosesnya dengan benar.
Bayangkan Anda tidak bisa menjumlahkan “apel” dengan “jeruk”, tetapi Anda bisa menjumlahkan 10 dengan 5. Inilah mengapa tipe data itu penting.
Berikut adalah tiga tipe data primitif yang paling dasar dan sering digunakan.
1. String 📝
Untuk apa: Menyimpan data berupa teks.
Aturan: Nilainya harus diapit oleh tanda kutip, bisa kutip satu (
'...'), kutip dua ("..."), atau backtick (`...`).Analogi: Apapun yang bisa Anda ketik sebagai tulisan.
Contoh Kode:
let namaDepan = "Citra";
let namaBelakang = 'Lestari';
let alamat = `Jalan Pandanaran No. 12`;
let perkenalan = "Halo, nama saya " + namaDepan + " " + namaBelakang;
console.log(perkenalan); // Output: Halo, nama saya Citra Lestari
2. Number 🔢
Untuk apa: Menyimpan data berupa angka, baik itu bilangan bulat (integer) maupun desimal (float).
Aturan: Nilainya ditulis tanpa tanda kutip.
Analogi: Angka yang bisa digunakan untuk operasi matematika (penjumlahan, perkalian, dll).
Contoh Kode:
let jumlahSiswa = 35;
let hargaBuku = 15000;
let nilaiUjian = 85.5;
let totalHarga = hargaBuku * 3; // Operasi perkalian
console.log(totalHarga); // Output: 45000
3. Boolean ✅❌
Untuk apa: Menyimpan data logika yang hanya memiliki dua kemungkinan nilai:
true(benar) ataufalse(salah).Aturan: Nilainya ditulis
trueataufalsetanpa tanda kutip.Analogi: Sebuah saklar lampu (ON/OFF) atau jawaban dari pertanyaan ya/tidak.
Contoh Kode:
let sudahMengerjakanPR = true;
let apakahAdmin = false;
let umur = 17;
let bolehMasuk = umur > 15; // Hasil perbandingan ini adalah boolean
console.log(sudahMengerjakanPR); // Output: true
console.log(bolehMasuk); // Output: true, karena 17 lebih besar dari 15
Implementasi Nyata di Dunia Kerja
Variabel dan tipe data adalah fondasi dari semua program. Setiap aplikasi yang Anda gunakan pasti menyimpannya.
Studi Kasus: Profil Pengguna di Media Sosial 👤
Bayangkan data yang dibutuhkan untuk menampilkan sebuah profil di aplikasi seperti Instagram atau TikTok.
Nama Pengguna (Username): Disimpan sebagai String. Nama ini adalah teks.
Jumlah Pengikut (Followers): Disimpan sebagai Number. Angka ini bisa bertambah atau berkurang.
Status Verifikasi (Verified): Disimpan sebagai Boolean. Akun tersebut bisa
true(terverifikasi, ada centang biru) ataufalse(tidak terverifikasi).
Contoh Kode di Dunia Nyata
// Data ini bisa didapat dari server database
const username = "mts_sunanpandanaran";
let jumlahPengikut = 12500;
let isVerified = true; // Akun ini sudah terverifikasi
// Program kemudian menggunakan variabel ini untuk menampilkan profil di layar
console.log("Menampilkan profil untuk: " + username);
console.log("Jumlah Pengikut: " + jumlahPengikut);
if (isVerified) {
console.log("Menampilkan ikon centang biru...");
}
Kesimpulan Bab Ini: Anda telah mempelajari blok bangunan paling dasar dalam pemrograman: variabel sebagai wadah dan tipe data (String, Number, Boolean) sebagai jenis isinya. Memahami cara menyimpan dan membedakan jenis informasi ini sangat penting sebelum kita bisa mulai membuat program yang melakukan hal-hal yang lebih kompleks.
Bab 3: Array & Object - Menyimpan Banyak Data Secara Terstruktur
Di bab sebelumnya, kita belajar bahwa satu variabel hanya bisa menyimpan satu nilai (let nama = "Budi"). Tapi, bagaimana jika kita ingin menyimpan daftar semua nama siswa di kelas? Atau data lengkap tentang satu siswa? Tentu tidak efisien jika kita harus membuat puluhan variabel.
Di sinilah Array dan Object berperan sebagai “variabel super” yang bisa menampung banyak data sekaligus.
1. Array: Daftar yang Teratur 🗂️
Array adalah tipe data yang digunakan untuk menyimpan kumpulan data dalam satu daftar yang berurutan.
Analogi: Bayangkan sebuah rak buku dengan slot bernomor atau daftar absensi kelas. Setiap item memiliki urutan yang jelas.
Sintaks: Menggunakan kurung siku
[ ], dan setiap item di dalamnya dipisahkan oleh koma.
Kapan menggunakan Array? Saat Anda membutuhkan daftar item yang sejenis dan urutannya penting. Contoh: daftar hobi, daftar teman, daftar belanjaan.
Contoh Kode:
// Membuat array yang berisi daftar nama buah
let daftarBuah = ["Apel", "Jeruk", "Mangga", "Durian"];
console.log(daftarBuah); // Output: ["Apel", "Jeruk", "Mangga", "Durian"]
Konsep Kunci: Indeks (Index)
Setiap item di dalam array memiliki “nomor urut” yang disebut indeks. Indeks ini sangat penting karena digunakan untuk mengakses item tertentu.
🚨 PENTING: Indeks di dalam array selalu dimulai dari 0, bukan 1.
Item pertama (“Apel”) ada di indeks
0.Item kedua (“Jeruk”) ada di indeks
1.Dan seterusnya.
Mengakses Item Array:
let daftarBuah = ["Apel", "Jeruk", "Mangga", "Durian"];
// Mengambil buah pertama
let buahPertama = daftarBuah[0];
console.log(buahPertama); // Output: "Apel"
// Mengambil buah ketiga
let buahKetiga = daftarBuah[2];
console.log(buahKetiga); // Output: "Mangga"
// Mengetahui jumlah item dalam array
console.log(daftarBuah.length); // Output: 4
2. Object: Biodata yang Detail 🧑💼
Object adalah tipe data yang digunakan untuk menyimpan kumpulan data yang saling berhubungan, yang mendeskripsikan satu entitas.
Analogi: Bayangkan sebuah kartu identitas atau biodata. Ada label (seperti “Nama”, “Umur”) dan ada isinya.
Sintaks: Menggunakan kurung kurawal
{ }. Datanya disimpan dalam format pasangankey: value(kunci: nilai).keyadalah labelnya (selalu teks), danvalueadalah datanya.
Kapan menggunakan Object? Saat Anda perlu mendeskripsikan satu hal secara detail dengan banyak properti. Contoh: data seorang siswa, spesifikasi sebuah laptop, detail sebuah produk.
Contoh Kode:
// Membuat object yang mendeskripsikan seorang siswa
let dataSiswa = {
nama: "Budi Sanjaya",
kelas: "8A",
umur: 14,
sudahLulus: false,
hobi: ["Membaca", "Bermain Bola"] // Value bisa berupa array!
};
console.log(dataSiswa);
Konsep Kunci: Properti (Property)
Pasangan key: value di dalam object disebut properti. Untuk mengakses nilai dari sebuah properti, kita menggunakan notasi titik (.).
Mengakses Properti Object:
let dataSiswa = {
nama: "Budi Sanjaya",
kelas: "8A",
umur: 14
};
// Mengambil nama siswa
let nama = dataSiswa.nama;
console.log(nama); // Output: "Budi Sanjaya"
// Mengambil umur siswa
let umur = dataSiswa.umur;
console.log(umur); // Output: 14
Implementasi Nyata di Dunia Kerja
Di dunia nyata, Array dan Object hampir selalu digunakan bersama-sama. Struktur data yang paling umum adalah sebuah Array of Objects (Array yang setiap itemnya adalah Object).
Studi Kasus: Daftar Kontak di Ponsel Anda 📱
Bayangkan aplikasi kontak di ponsel Anda. Seluruh daftar kontak adalah sebuah Array. Setiap satu kontak di dalam daftar itu adalah sebuah Object, karena satu kontak memiliki detail seperti nama, nomor telepon, dan email.
Contoh Kode di Dunia Nyata:
// Ini adalah ARRAY yang berisi beberapa OBJECT kontak
const daftarKontak = [
{ // Kontak pertama (indeks 0)
nama: "Budi Sanjaya",
nomorTelepon: "081234567890",
email: "budi.sanjaya@email.com"
},
{ // Kontak kedua (indeks 1)
nama: "Citra Lestari",
nomorTelepon: "085678901234",
email: "citra.lestari@email.com"
},
{ // Kontak ketiga (indeks 2)
nama: "Ahmad Dahlan",
nomorTelepon: "087890123456",
email: "ahmad.dahlan@email.com"
}
];
// Bagaimana cara developer mengambil nomor telepon Citra?
// 1. Akses kontak Citra di indeks 1
// 2. Dari object tersebut, ambil properti 'nomorTelepon'
let nomorCitra = daftarKontak[1].nomorTelepon;
console.log(nomorCitra); // Output: "085678901234"
// Bagaimana cara menampilkan nama kontak pertama?
let namaKontakPertama = daftarKontak[0].nama;
console.log(namaKontakPertama); // Output: "Budi Sanjaya"
Struktur “Array of Objects” ini adalah fondasi cara data ditampilkan di hampir semua aplikasi: feed Instagram (array dari object post), daftar produk di Tokopedia (array dari object produk), dan daftar video di YouTube (array dari object video).
Kesimpulan Bab Ini: Anda kini telah menguasai dua tipe data paling kuat di JavaScript. Array untuk daftar yang terurut, dan Object untuk data yang terstruktur. Kemampuan untuk menggabungkan keduanya akan memungkinkan Anda bekerja dengan data yang kompleks, sama seperti yang dilakukan para profesional.
-
Logika Pemrograman
Bab 4: Operator - Melakukan Aksi pada Data Anda
Kita sudah tahu cara menyimpan data menggunakan variabel. Sekarang, saatnya belajar bagaimana cara mengolah, membandingkan, dan memanipulasi data tersebut. Untuk melakukan semua itu, kita menggunakan Operator.
Apa itu Operator? Operator adalah simbol-simbol khusus yang melakukan operasi pada nilai atau variabel. Anggap saja operator sebagai “kata kerja” dalam program Anda. Mereka memberi tahu JavaScript apa yang harus dilakukan.
Contohnya, dalam 5 + 10, + adalah operator yang melakukan operasi penjumlahan pada nilai 5 dan 10.
Ada beberapa jenis operator penting yang akan kita pelajari.
1. Operator Aritmatika 🧮
Operator ini digunakan untuk melakukan perhitungan matematika, persis seperti yang ada di kalkulator.
+(Penjumlahan)-(Pengurangan)*(Perkalian)/(Pembagian)%(Modulo / Sisa Bagi)
Apa itu Modulo (%)? Operator ini akan menghasilkan sisa dari sebuah operasi pembagian. Contoh: 10 % 3 hasilnya adalah 1, karena 10 dibagi 3 adalah 3 dengan sisa 1.
Contoh Kode:
let angka1 = 15;
let angka2 = 4;
let hasilTambah = angka1 + angka2; // 15 + 4 = 19
let hasilKali = angka1 * angka2; // 15 * 4 = 60
let sisaBagi = angka1 % angka2; // 15 dibagi 4 adalah 3 sisa 3. Hasilnya 3.
console.log(hasilTambah); // Output: 19
console.log(sisaBagi); // Output: 3
2. Operator Penugasan (Assignment) =
Operator ini digunakan untuk “menugaskan” atau memberikan nilai kepada sebuah variabel.
=Memberikan nilai. Contoh:let nilai = 100;+=Menambahkan nilai yang sudah ada.x += 5adalah singkatan darix = x + 5.-=Mengurangi nilai yang sudah ada.x -= 5adalah singkatan darix = x - 5.*=dan/=juga berlaku sama.
Contoh Kode
let skorGame = 100;
console.log("Skor awal: " + skorGame); // Output: 100
// Pemain mendapat bonus 50 poin
skorGame += 50; // sama dengan skorGame = skorGame + 50;
console.log("Skor setelah bonus: " + skorGame); // Output: 150
// Pemain terkena penalti 20 poin
skorGame -= 20;
console.log("Skor setelah penalti: " + skorGame); // Output: 130
Menggunakan += atau -= adalah praktik yang sangat umum di dunia kerja untuk memperbarui nilai.
3. Operator Perbandingan 🤔
Operator ini digunakan untuk membandingkan dua nilai. Hasil dari perbandingan ini selalu sebuah nilai Boolean (true atau false).
===Sama dengan (nilai dan tipe datanya harus sama). Selalu gunakan ini!!==Tidak sama dengan (nilai dan tipe datanya). Selalu gunakan ini!>Lebih dari<Kurang dari>=Lebih dari atau sama dengan<=Kurang dari atau sama dengan
🚨 PENTING: Selalu gunakan === (tiga sama dengan) untuk membandingkan kesamaan, bukan == (dua sama dengan). === lebih aman karena juga membandingkan tipe datanya. Contohnya, 7 === "7" hasilnya false (karena satu Number, satu String), yang mana lebih akurat.
Contoh Kode:
let umurBudi = 14;
let umurCitra = 15;
let syaratUmurMasuk = 15;
console.log(umurCitra > umurBudi); // Apakah umur Citra > umur Budi? Output: true
console.log(umurBudi >= syaratUmurMasuk); // Apakah umur Budi >= 15? Output: false
console.log(umurCitra === syaratUmurMasuk); // Apakah umur Citra === 15? Output: true
4. Operator Logika 🧠
Operator ini digunakan untuk menggabungkan dua atau lebih kondisi boolean.
&&(AND / Dan): Hasilnya akantruehanya jika kedua kondisi bernilaitrue.||(OR / Atau): Hasilnya akantruejika salah satu saja dari kondisi bernilaitrue.!(NOT / Bukan): Membalikkan nilai boolean.!truemenjadifalse.
Contoh Kode:
let punyaTiket = true;
let datangTepatWaktu = false;
let bawaUndangan = true;
// Untuk masuk ke bioskop, harus punya tiket DAN datang tepat waktu
let bolehMasukBioskop = punyaTiket && datangTepatWaktu;
console.log("Boleh masuk bioskop? " + bolehMasukBioskop); // Output: false
// Untuk masuk ke pesta, boleh punya tiket ATAU bawa undangan
let bolehMasukPesta = punyaTiket || bawaUndangan;
console.log("Boleh masuk pesta? " + bolehMasukPesta); // Output: true
Implementasi Nyata di Dunia Kerja
Studi Kasus: Proses Checkout di Toko Online 🛒 Bayangkan Anda sedang berada di halaman pembayaran sebuah e-commerce. Di belakang layar, semua jenis operator bekerja sama.
// Data dari halaman belanja
const hargaBarang = 50000;
let jumlahBeli = 3;
let punyaKodeKupon = true;
let isMemberPremium = false;
// 1. Operator Aritmatika: Menghitung subtotal
let subTotal = hargaBarang * jumlahBeli; // 50000 * 3 = 150000
console.log("Subtotal: " + subTotal);
// 2. Operator Perbandingan & Logika: Cek diskon
// Syarat diskon: pembelian di atas 100rb DAN merupakan member premium
let dapatDiskon = subTotal > 100000 && isMemberPremium; // true && false -> false
console.log("Dapat diskon? " + dapatDiskon); // Output: false
let diskon = 0;
if (dapatDiskon) {
diskon = 20000; // Jika dapat diskon, nilainya 20rb
}
// 3. Operator Penugasan: Menghitung total akhir
let totalBayar = subTotal;
totalBayar -= diskon; // Mengurangi subtotal dengan diskon
console.log("Total yang harus dibayar: " + totalBayar); // Output: 150000
Kode di atas adalah contoh sederhana bagaimana operator menjadi inti dari setiap logika bisnis dalam sebuah aplikasi.
Kesimpulan Bab Ini: Operator adalah alat fundamental Anda untuk “berpikir” di dalam kode. Anda telah belajar cara melakukan perhitungan (Aritmatika), menyimpan nilai (Penugasan), membandingkan kondisi (Perbandingan), dan menggabungkan logika (Logika). Menguasai ini akan membuka jalan untuk membuat program yang cerdas dan dinamis.
Bab 5: Kondisi (If/Else) - Mengajarkan Program Cara Mengambil Keputusan
Sejauh ini, kode yang kita tulis berjalan lurus dari atas ke bawah. Tapi, program yang cerdas harus bisa mengambil keputusan dan memilih jalur yang berbeda tergantung situasi. Di sinilah Kondisi berperan.
Apa itu Kondisi? Kondisi (atau Conditional Statements) adalah struktur kode yang memungkinkan Anda menjalankan blok kode tertentu hanya jika sebuah kondisi terpenuhi (bernilai true).
Analogi: Bayangkan percabangan jalan. Anda akan memilih jalan ke kiri jika tujuannya ke pasar, dan memilih jalan ke kanan jika tujuannya ke sekolah. Program Anda juga bisa memilih “jalur” seperti ini.
Struktur kondisi menggunakan hasil dari Operator Perbandingan dan Operator Logika (yang selalu true atau false) untuk mengambil keputusan.
1. Struktur if (Jika)
Struktur if adalah yang paling dasar. Blok kode di dalamnya hanya akan dijalankan jika kondisi di dalam kurung () bernilai true. Jika false, blok kode itu akan dilewati begitu saja.
Sintaks:
if (kondisi) {
// Kode ini hanya dijalankan jika 'kondisi' bernilai true
}
Contoh Kode:
let umur = 18;
let syaratMinimalUmur = 17;
if (umur >= syaratMinimalUmur) {
console.log("Selamat, Anda boleh membuat SIM.");
}
// Program akan lanjut ke sini, baik kondisi true maupun false.
console.log("Pengecekan umur selesai.");
Jika Anda mengubah umur menjadi 16, pesan “Selamat, Anda boleh membuat SIM.” tidak akan pernah muncul.
2. Struktur if...else (Jika… Jika Tidak)
Struktur ini menyediakan jalur alternatif. Jika kondisi if bernilai true, jalankan blok kode pertama. Jika tidak (else), jalankan blok kode kedua.
Sintaks:
if (kondisi) {
// Jalankan kode ini jika kondisi true
} else {
// Jalankan kode ini jika kondisi false
}
Contoh Kode:
let cuacaHariIni = "Hujan";
if (cuacaHariIni === "Hujan") {
console.log("Jangan lupa bawa payung!");
} else {
console.log("Hari ini cerah, pakai topi saja.");
}
Program ini pasti akan menjalankan salah satu dari dua blok kode tersebut, tidak mungkin keduanya atau tidak sama sekali.
3. Struktur if...else if...else (Bertingkat)
Bagaimana jika ada lebih dari dua kemungkinan? Kita bisa menggunakan else if untuk menambahkan pengecekan kondisi sebanyak yang kita butuhkan.
Analogi: Proses menentukan nilai rapor.
Jika nilai di atas 90, dapat A.
Jika tidak, tapi jika nilai di atas 80, dapat B.
Jika tidak, tapi jika nilai di atas 70, dapat C.
Selain itu semua, dapat D.
Sintaks :
if (kondisi1) {
// Jalankan jika kondisi1 true
} else if (kondisi2) {
// Jalankan jika kondisi1 false DAN kondisi2 true
} else {
// Jalankan jika semua kondisi di atas false
}
Contoh Kode:
let nilaiUjian = 76;
let predikat;
if (nilaiUjian >= 90) {
predikat = "A (Sangat Baik)";
} else if (nilaiUjian >= 80) {
predikat = "B (Baik)";
} else if (nilaiUjian >= 70) {
predikat = "C (Cukup)";
} else {
predikat = "D (Kurang)";
}
console.log("Predikat nilai Anda: " + predikat); // Output: Predikat nilai Anda: C (Cukup)
Program akan berhenti memeriksa setelah menemukan kondisi pertama yang true.
Implementasi Nyata di Dunia Kerja
Studi Kasus: Sistem Login Sederhana 🔐 Setiap kali Anda login ke sebuah akun, di belakang layar terjadi serangkaian pengecekan kondisi. Sistem harus memutuskan apakah Anda pengguna yang sah, apakah password Anda salah, atau apakah akun Anda tidak ada.
// Data yang seharusnya ada di database
const usernameTersimpan = "siswa_pandanaran";
const passwordTersimpan = "javascript123";
// Data yang dimasukkan oleh pengguna di form login
let usernameInput = "siswa_pandanaran";
let passwordInput = "passwordSalah";
// Proses pengecekan kondisi
if (usernameInput === usernameTersimpan && passwordInput === passwordTersimpan) {
// Kondisi 1: Keduanya benar
console.log("Login Berhasil! Selamat datang, " + usernameTersimpan + ".");
} else if (usernameInput === usernameTersimpan && passwordInput !== passwordTersimpan) {
// Kondisi 2: Username benar, tapi password salah
console.log("Login Gagal! Password yang Anda masukkan salah.");
} else {
// Kondisi 3: Selain itu (artinya username salah)
console.log("Login Gagal! Username tidak ditemukan.");
}
Coba ubah nilai usernameInput dan passwordInput untuk melihat bagaimana pesan outputnya berubah. Inilah inti dari logika pemrograman: merespons input yang berbeda dengan output yang sesuai.
Kesimpulan Bab Ini: Selamat! Anda baru saja mempelajari salah satu konsep paling fundamental dalam pemrograman: logika percabangan. Dengan if, else if, dan else, Anda bisa membuat program yang tidak lagi kaku, melainkan cerdas, dinamis, dan mampu beradaptasi dengan berbagai skenario dan input dari pengguna.
Bab 6: Perulangan (Looping) - Menyuruh Program Bekerja Berulang Kali
Bayangkan Anda harus menulis “Saya tidak akan mengobrol di kelas” sebanyak 100 kali. Tentu sangat melelahkan! Di dalam pemrograman, sering kali kita perlu melakukan tugas yang sama berulang-ulang. Daripada menulis kode yang sama berkali-kali, kita menggunakan Perulangan atau Looping.
Apa itu Perulangan? Perulangan adalah sebuah struktur yang memungkinkan Anda menjalankan blok kode yang sama secara berulang, sampai sebuah kondisi tertentu tidak lagi terpenuhi.
Analogi: Bayangkan seorang koki yang diperintahkan untuk “terus mengaduk adonan sampai mengembang”. Perintah “mengaduk” akan terus diulang. Kondisi berhentinya adalah “adonan mengembang”.
Masalah: Tanpa Perulangan
Misalkan kita ingin menampilkan angka 1 sampai 5 ke konsol. Tanpa perulangan, kodenya akan seperti ini:
console.log(1);
console.log(2);
console.log(3);
console.log(4);
console.log(5);
Ini tidak efisien. Bagaimana jika kita ingin menampilkannya sampai 1.000? Kodenya akan menjadi sangat panjang. Di sinilah perulangan datang untuk menyelamatkan kita.
1. for Loop (Perulangan for)
for loop adalah jenis perulangan yang paling umum digunakan. Biasanya, ini dipakai ketika kita tahu persis berapa kali kita ingin mengulang sebuah tugas.
Struktur for loop memiliki tiga bagian penting yang dipisahkan oleh titik koma ( ; ).
Sintaks:
for ( inisialisasi; kondisi; iterasi ) {
// Kode yang akan diulang selama 'kondisi' bernilai true
}
Mari kita bedah tiga bagian ini:
Inisialisasi:
let i = 0;Langkah pertama yang hanya dijalankan satu kali di awal. Biasanya digunakan untuk membuat variabel penghitung (umumnya dinamai
idari kata index atau iterator). Artinya, “kita mulai menghitung dari 0”.
Kondisi:
i < 5;Sebuah kondisi yang akan dicek sebelum setiap perulangan. Selama kondisi ini bernilai
true, perulangan akan terus berjalan. Artinya, “ulangi terus selamaimasih kurang dari 5″.
Iterasi:
i++Sebuah aksi yang dijalankan setelah setiap perulangan selesai.
i++adalah singkatan darii = i + 1. Artinya, “tambahkan 1 keisetelah selesai satu putaran”.
Contoh Kode: Mari kita selesaikan masalah tadi (menampilkan angka 1 sampai 5) menggunakan for loop
for (let i = 1; i <= 5; i++) {
console.log("Ini adalah putaran ke-" + i);
}
Output:
Ini adalah putaran ke-1
Ini adalah putaran ke-2
Ini adalah putaran ke-3
Ini adalah putaran ke-4
Ini adalah putaran ke-5
Jauh lebih singkat dan efisien! Jika ingin sampai 1.000, Anda tinggal mengubah 5 menjadi 1000.
2. while Loop (Perulangan while)
while loop sedikit berbeda. Perulangan ini akan terus berjalan selama (while) sebuah kondisi bernilai true. Biasanya dipakai saat kita tidak tahu pasti berapa kali perulangan akan terjadi.
Analogi: Bermain game. Selama nyawa lebih dari 0, teruslah bermain.
Sintaks:
while (kondisi) {
// Kode yang akan terus diulang
// PENTING: Harus ada kode di sini yang bisa membuat kondisi menjadi false!
}
🚨 PERHATIAN: Hati-hati dengan while loop. Jika kondisi di dalamnya tidak pernah berubah menjadi false, program Anda akan terjebak dalam perulangan tak terbatas (infinite loop) dan bisa menyebabkan browser macet.
Contoh Kode
let hitunganMundur = 3;
while (hitunganMundur > 0) {
console.log("Roket akan meluncur dalam... " + hitunganMundur);
hitunganMundur--; // Ini singkatan dari hitunganMundur = hitunganMundur - 1
}
console.log("GO! Roket meluncur!");
hitunganMundur-- sangat penting. Tanpa baris itu, hitunganMundur akan selamanya 3 dan loop tidak akan pernah berhenti.
Implementasi Nyata di Dunia Kerja
Penggunaan perulangan yang paling umum dan paling penting di dunia kerja adalah untuk mengolah data di dalam Array.
Studi Kasus: Menampilkan Daftar Kontak 📱 Ingat materi kita tentang Array of Objects? Kita punya daftar kontak. Bagaimana cara menampilkan semua kontak di daftar itu ke layar? Tentu dengan perulangan!
const daftarKontak = [
{ nama: "Budi Sanjaya", nomorTelepon: "081234567890" },
{ nama: "Citra Lestari", nomorTelepon: "085678901234" },
{ nama: "Ahmad Dahlan", nomorTelepon: "087890123456" }
];
console.log("--- Menampilkan Semua Kontak ---");
// Kita gunakan for loop untuk "mengunjungi" setiap item di dalam array
for (let i = 0; i < daftarKontak.length; i++) {
// daftarKontak.length adalah 3. Loop akan berjalan selama i < 3 (i=0, 1, 2)
// Ambil satu object kontak sesuai dengan indeks saat ini (i)
let kontak = daftarKontak[i];
// Tampilkan detail dari object kontak tersebut
console.log("Nama: " + kontak.nama + ", Nomor: " + kontak.nomorTelepon);
}
Output:
--- Menampilkan Semua Kontak ---
Nama: Budi Sanjaya, Nomor: 081234567890
Nama: Citra Lestari, Nomor: 085678901234
Nama: Ahmad Dahlan, Nomor: 087890123456
Logika ini adalah dasar dari hampir semua aplikasi. Instagram menggunakan loop untuk menampilkan feed Anda, Tokopedia menggunakan loop untuk menampilkan daftar produk, dan Spotify menggunakan loop untuk menampilkan lagu di playlist Anda.
Kesimpulan Bab Ini: Perulangan adalah alat otomasi Anda. Dengan for dan while, Anda bisa mengeksekusi tugas berulang secara efisien. Menggabungkan perulangan dengan array adalah salah satu keahlian paling fundamental dan kuat yang akan Anda gunakan terus-menerus sebagai seorang developer.
-
Membuat Website Interaktif (DOM)
Bab 7: Pengenalan DOM - Jembatan Antara JavaScript dan HTML
Sejauh ini, semua kode JavaScript yang kita tulis hanya berjalan di belakang layar dan menampilkan hasilnya di console. Tapi, tujuan utama kita adalah membuat halaman web menjadi interaktif—mengubah teks, mengganti warna, menyembunyikan elemen, dan lain-lain.
Bagaimana caranya? Jawabannya adalah DOM.
Apa itu DOM?
DOM adalah singkatan dari Document Object Model. Ini adalah cara browser “melihat” struktur sebuah halaman HTML. Saat browser memuat file HTML Anda, ia tidak melihatnya sebagai teks biasa, melainkan mengubahnya menjadi sebuah model terstruktur yang mirip seperti pohon keluarga.
Document: File HTML Anda secara keseluruhan.
Object: Setiap elemen di dalam HTML (seperti
<h1>,<p>,<body>,<div>) dianggap sebagai sebuah objek oleh JavaScript.Model: Struktur pohon yang merepresentasikan hubungan antara semua objek/elemen tersebut (mana yang merupakan induk, mana yang anak).
Melalui DOM inilah JavaScript mendapatkan “kekuatan” untuk mengakses dan memanipulasi setiap bagian dari halaman web Anda. DOM adalah jembatan yang menghubungkan logika JavaScript dengan elemen visual HTML.
Bagaimana Cara JavaScript Mengakses Elemen?
Sebelum bisa mengubah sesuatu, kita harus bisa memilih atau menemukan elemen HTML yang kita inginkan terlebih dahulu. JavaScript menyediakan beberapa “alat pencarian” yang sangat kuat.
Semua pencarian dimulai dari objek global document, yang mewakili seluruh halaman.
1. document.getElementById('id_elemen')
Ini adalah cara paling spesifik dan cepat untuk menemukan sebuah elemen. Anda menargetkan elemen berdasarkan atribut id-nya yang unik.
Analogi: Mencari satu siswa di seluruh sekolah berdasarkan Nomor Induk Siswa (NIS) yang unik. Pasti hanya ketemu satu orang.
Contoh Kode: File HTML:
<!DOCTYPE html>
<html>
<head>
<title>Belajar DOM</title>
</head>
<body>
<h1 id="judul-utama">Selamat Datang di Website Saya</h1>
</body>
</html>
File JavaScript:
// Memilih elemen h1 dengan id 'judul-utama'
const judulHalaman = document.getElementById('judul-utama');
// Sekarang, variabel 'judulHalaman' adalah sebuah object yang mewakili elemen h1.
// Kita bisa melakukan apa saja padanya.
console.log(judulHalaman);
console.dir(judulHalaman); // Gunakan console.dir untuk melihat semua propertinya!
Jika Anda jalankan, console.dir akan menunjukkan bahwa judulHalaman adalah sebuah object dengan banyak sekali properti yang bisa kita ubah, seperti textContent, style, className, dll.
2. document.querySelector('selector_css')
Ini adalah cara yang lebih modern dan fleksibel. Anda bisa menemukan elemen menggunakan selector CSS apa pun yang sudah Anda kenal. Metode ini akan mengembalikan elemen pertama yang cocok.
Analogi: Mencari siswa pertama yang memakai “baju merah” (
.baju-merah) atau siswa dengan NIS123(#nis-123).
Contoh Kode: File HTML:
<p class="paragraf">Ini adalah paragraf pertama.</p>
<p class="paragraf">Ini adalah paragraf kedua.</p>
File JavaScript:
// Memilih elemen PERTAMA yang memiliki class 'paragraf'
const paragrafPertama = document.querySelector('.paragraf');
console.log(paragrafPertama); // Akan menghasilkan elemen paragraf pertama
// Bisa juga untuk memilih berdasarkan tag
const bodyHalaman = document.querySelector('body');
// Atau berdasarkan ID (sama seperti getElementById)
const judulHalaman = document.querySelector('#judul-utama');
3. document.querySelectorAll('selector_css')
Sama seperti querySelector, tetapi metode ini akan mengembalikan SEMUA elemen yang cocok dalam sebuah daftar yang mirip seperti Array (disebut NodeList).
Analogi: Mencari semua siswa yang memakai “baju merah”.
Contoh Kode: File HTML:
<ul>
<li>Apel</li>
<li>Jeruk</li>
<li>Mangga</li>
</ul>
File JavaScript:
const semuaBuah = document.querySelectorAll('li');
console.log(semuaBuah); // Menghasilkan daftar berisi 3 elemen <li>
// Karena ini adalah daftar, kita bisa menggunakan loop untuk mengaksesnya satu per satu!
for(let i = 0; i < semuaBuah.length; i++) {
console.log(semuaBuah[i].textContent); // .textContent untuk mengambil teks di dalamnya
}
Implementasi Nyata di Dunia Kerja
Studi Kasus: Validasi Form Pendaftaran 📝 Saat Anda mengisi form online dan lupa mengisi kolom email, seringkali muncul pesan error berwarna merah seperti “Email wajib diisi” di bawah kolom tersebut. Bagaimana cara kerjanya?
HTML: Ada sebuah elemen
<p>kosong di bawah input email, yang disembunyikan dengan CSS dan memilikiid, misalnyaid="email-error".JavaScript Event: Saat Anda menekan tombol “Daftar”, JavaScript akan mengecek apakah input email kosong.
DOM Selection: Jika kosong, JavaScript akan memilih elemen paragraf tadi menggunakan
document.getElementById('email-error').DOM Manipulation: Setelah elemen itu terpilih, JavaScript akan mengubah teks di dalamnya menjadi “Email wajib diisi” dan mengubah warnanya menjadi merah. (Ini akan kita pelajari di bab selanjutnya!).
// 1. Memilih elemen-elemen yang dibutuhkan terlebih dahulu
const inputEmail = document.getElementById('input-email');
const pesanError = document.getElementById('email-error');
const tombolDaftar = document.getElementById('tombol-daftar');
// Kode ini akan menjadi dasar untuk validasi form di bab selanjutnya.
// Langkah pertama yang paling penting adalah bisa memilih elemennya dengan benar.
Kesimpulan Bab Ini: DOM adalah konsep fundamental yang mengubah JavaScript dari sekadar bahasa kalkulator menjadi alat yang powerful untuk web development. Anda telah mempelajari cara kerja DOM dan, yang terpenting, cara memilih elemen HTML menggunakan berbagai metode. Menguasai cara memilih elemen adalah langkah pertama yang wajib sebelum Anda bisa mulai membuat halaman web yang benar-benar hidup dan interaktif
Bab 8: Mengubah Konten & Gaya - Membuat Halaman Web Berubah di Depan Mata Anda
Di bab sebelumnya, kita telah belajar cara “memilih” atau “menemukan” elemen HTML menggunakan DOM. Sekarang, saatnya melakukan bagian yang paling ajaib: mengubah elemen-elemen tersebut!
Setelah sebuah elemen dipilih dan disimpan dalam variabel, variabel itu menjadi sebuah object yang hidup. Kita bisa mengubah propertinya untuk mengubah tampilan atau isi elemen tersebut secara langsung.
1. Mengubah Konten Elemen
Ini adalah salah satu tugas paling umum dalam manipulasi DOM. Ada dua cara utama untuk mengubah isi dari sebuah elemen.
A. Properti .textContent
Properti ini digunakan untuk mengubah konten teks polos dari sebuah elemen. JavaScript akan mengabaikan semua tag HTML yang mungkin ada di dalamnya dan hanya fokus pada teksnya.
Analogi: Seperti mengganti tulisan di selembar stiker. Anda hanya peduli pada teksnya.
Contoh Kode:
<h1 id="sapaan">Halo Dunia!</h1>
// File JavaScript
// 1. Pilih elemennya terlebih dahulu
const judulSapaan = document.getElementById('sapaan');
// 2. Ubah konten teksnya menggunakan .textContent
judulSapaan.textContent = "Selamat Pagi, Siswa Pandanaran!";
Hasil: Teks di halaman web akan langsung berubah dari “Halo Dunia!” menjadi “Selamat Pagi, Siswa Pandanaran!”.
B. Properti .innerHTML
Properti ini lebih kuat. .innerHTML memungkinkan Anda untuk mengubah seluruh konten HTML di dalam sebuah elemen, termasuk tag-tagnya.
Analogi: Seperti merenovasi sebuah ruangan. Anda tidak hanya mengubah tulisannya, tapi juga bisa menambahkan “paragraf”, “gambar”, atau “link” baru di dalamnya.
Contoh Kode
<div id="info-box">Konten lama akan diganti.</div>
// File JavaScript
const boxInfo = document.getElementById('info-box');
// Kita bisa memasukkan tag HTML seperti <strong> untuk teks tebal
boxInfo.innerHTML = "<p>Ini adalah paragraf baru. Kata ini <strong>penting</strong>.</p>";
Hasil: div tersebut sekarang akan berisi sebuah paragraf dengan kata “penting” yang dicetak tebal.
🚨 PERHATIAN: Hati-hati saat menggunakan .innerHTML dengan konten yang berasal dari input pengguna. Jika tidak difilter, ini bisa membuka celah keamanan yang disebut XSS (Cross-Site Scripting). Untuk mengubah teks biasa, selalu utamakan .textContent.
2. Mengubah Gaya (CSS) Elemen
JavaScript juga bisa mengubah gaya CSS dari sebuah elemen secara langsung. Ini sangat berguna untuk membuat efek visual atau memberikan feedback kepada pengguna.
A. Properti .style
Setiap elemen yang kita pilih memiliki properti .style. Properti ini adalah sebuah object yang berisi semua properti CSS yang bisa kita ubah.
Aturan Penting: Nama properti CSS yang terdiri dari dua kata (seperti background-color) diubah menjadi format camelCase di JavaScript (menjadi backgroundColor).
background-color->backgroundColorfont-size->fontSizeborder-radius->borderRadius
Contoh Kode:
<h2 id="subjudul">Ini adalah subjudul biasa.</h2>
// File JavaScript
const subJudul = document.getElementById('subjudul');
// Mengubah gaya CSS-nya satu per satu
subJudul.style.color = 'blue';
subJudul.style.backgroundColor = '#e0e0e0'; // Warna abu-abu muda
subJudul.style.padding = '10px';
subJudul.style.borderRadius = '5px';
Hasil: Subjudul tersebut sekarang akan memiliki teks biru dengan latar belakang abu-abu yang memiliki sudut melengkung.
B. Mengelola class (Cara yang Lebih Baik!)
Mengubah gaya satu per satu menggunakan .style bisa merepotkan. Cara yang lebih profesional adalah dengan menyiapkan class di file CSS, lalu menggunakan JavaScript hanya untuk menambah atau menghapus class tersebut.
Kita bisa melakukannya dengan properti .classList.
.classList.add('nama-class'): Menambahkan class baru..classList.remove('nama-class'): Menghapus class yang ada..classList.toggle('nama-class'): Jika class belum ada, maka ditambahkan. Jika sudah ada, maka dihapus. Sangat berguna untuk tombol!
Contoh Kode:
/* File CSS */
.pesan-sukses {
color: green;
border: 1px solid green;
background-color: #d4edda;
padding: 15px;
}
<p id="notifikasi">Ini adalah notifikasi awal.</p>
// File JavaScript
const notif = document.getElementById('notifikasi');
// Mengubah konten teksnya
notif.textContent = "Data berhasil disimpan!";
// Menambahkan class CSS untuk mengubah tampilannya
notif.classList.add('pesan-sukses');
Hasil: Paragraf notifikasi akan berubah teks dan tampilannya menjadi kotak pesan sukses berwarna hijau.
Implementasi Nyata di Dunia Kerja
Studi Kasus: Tombol “Dark Mode” / “Light Mode” 🌙 Fitur ini sangat populer dan merupakan contoh sempurna dari manipulasi DOM.
File CSS:
body {
transition: background-color 0.3s, color 0.3s;
}
body.dark-mode {
background-color: #222;
color: #eee;
}
File HTML:
<button id="tombol-tema">Ubah ke Dark Mode</button>
<p>Selamat datang di website kami. Coba ubah tema!</p>
File JavaScript:
// 1. Pilih elemen yang dibutuhkan
const tombolTema = document.getElementById('tombol-tema');
const bodyHalaman = document.querySelector('body');
// 2. Tambahkan 'event listener' (akan kita pelajari di bab selanjutnya)
// sederhananya, ini adalah "saat tombol diklik, jalankan fungsi ini"
tombolTema.addEventListener('click', function() {
// 3. Toggle class 'dark-mode' pada body
bodyHalaman.classList.toggle('dark-mode');
});
Hasil: Setiap kali tombol diklik, class dark-mode akan ditambahkan atau dihapus dari <body>, dan seluruh tampilan halaman akan berubah secara instan berkat CSS yang sudah kita siapkan.
Kesimpulan Bab Ini: Anda baru saja membuka kekuatan sejati JavaScript di dunia web! Dengan kemampuan untuk mengubah konten (.textContent, .innerHTML) dan gaya (.style, .classList), Anda kini bisa membuat halaman web yang merespons, memberikan feedback, dan berubah secara dinamis. Ini adalah fondasi dari semua antarmuka pengguna web yang modern.
Bab 9: Event Listener - Membuat Halaman Web Merespons Aksi Pengguna
Kita sudah sampai di bagian terakhir dan paling penting untuk membuat sebuah website menjadi hidup. Kita sudah tahu cara memilih elemen (DOM Selection) dan cara mengubahnya (DOM Manipulation). Tapi, kapan perubahan itu harus terjadi? Jawabannya adalah saat pengguna melakukan sesuatu.
Di sinilah Event Listener berperan.
Apa itu Event?
Event adalah segala sesuatu yang terjadi di halaman web yang bisa dideteksi oleh JavaScript. Ini adalah sinyal bahwa “sesuatu telah terjadi”.
Beberapa contoh event yang paling umum:
click: Pengguna mengklik sebuah elemen (tombol, gambar, link).mouseover: Kursor mouse bergerak ke atas sebuah elemen.mouseout: Kursor mouse bergerak meninggalkan sebuah elemen.keydown: Pengguna menekan sebuah tombol di keyboard.submit: Sebuah form dikirim.scroll: Pengguna menggulir halaman.
Apa itu Event Listener?
Event Listener adalah sebuah fungsi JavaScript yang “mendengarkan” atau menunggu sebuah event tertentu terjadi pada sebuah elemen. Ketika event yang ditunggu itu terjadi, fungsi tersebut akan otomatis dijalankan.
Analogi: Bayangkan sebuah bel pintu.
Elemen: Tombol bel.
Event Listener: Mekanisme di dalam bel yang terus mendengarkan tekanan.
Event: Aksi jari Anda menekan tombol (
click).Fungsi yang Dijalankan: Suara “Ding-dong!” berbunyi.
Cara Kerja: addEventListener()
Metode addEventListener() adalah cara modern dan paling direkomendasikan untuk memasang listener pada sebuah elemen.
Sintaks:
elemen.addEventListener('namaEvent', fungsiYangAkanDijalankan);
Mari kita bedah:
elemen: Variabel yang berisi elemen HTML yang sudah kita pilih (misalnya,const tombol = document.getElementById('tombol');).'namaEvent': Nama event yang ingin kita dengarkan, ditulis sebagai string. Contoh:'click'.fungsiYangAkanDijalankan: Fungsi yang akan dieksekusi ketika event terjadi. Fungsi ini sering disebut callback function.
Contoh Kode Sederhana:
<button id="tombol-sapa">Klik Saya!</button>
// File JavaScript
// 1. Pilih elemennya
const tombolSapa = document.getElementById('tombol-sapa');
// 2. Tambahkan event listener ke elemen tersebut
tombolSapa.addEventListener('click', function() {
// 3. Kode di dalam fungsi ini akan berjalan HANYA SAAT tombol diklik
alert('Halo! Terima kasih sudah mengklik.');
});
Fungsi yang kita tulis di dalam addEventListener disebut anonymous function karena tidak memiliki nama. Ini sangat umum digunakan untuk aksi yang sederhana.
Menyatukan Semuanya: Alur Kerja Developer
Sekarang, kita bisa melihat alur kerja lengkap seorang front-end developer saat membuat fitur interaktif:
Pilih Elemen (Selection): Temukan elemen HTML yang ingin Anda buat interaktif.
Dengarkan Event (Listening): Pasang
addEventListenerpada elemen tersebut untuk mendengarkan aksi pengguna (misalnya,'click').Ubah Sesuatu (Manipulation): Tulis kode di dalam fungsi listener untuk mengubah konten, gaya, atau apa pun di halaman tersebut.
Implementasi Nyata di Dunia Kerja
Studi Kasus: Membuat Penghitung Angka Interaktif 🔢 Ini adalah latihan klasik yang menggabungkan semua yang telah kita pelajari: variabel, seleksi DOM, manipulasi konten, dan event listener.
File HTML:
<h1>Penghitung:</h1>
<h2 id="display-angka">0</h2>
<button id="tombol-tambah">+ Tambah 1</button>
<button id="tombol-reset">Reset</button>
// --- SETUP AWAL ---
// Buat variabel untuk menyimpan angka hitungan
let hitungan = 0;
// 1. PILIH ELEMEN
const displayAngka = document.getElementById('display-angka');
const tombolTambah = document.getElementById('tombol-tambah');
const tombolReset = document.getElementById('tombol-reset');
// --- EVENT LISTENER UNTUK TOMBOL TAMBAH ---
// 2. DENGARKAN EVENT 'click' pada tombol tambah
tombolTambah.addEventListener('click', function() {
// 3. UBAH SESUATU SAAT EVENT TERJADI
// Tambah nilai variabel hitungan
hitungan++;
// Tampilkan nilai baru ke elemen h2
displayAngka.textContent = hitungan;
});
// --- EVENT LISTENER UNTUK TOMBOL RESET ---
// Lakukan hal yang sama untuk tombol reset
tombolReset.addEventListener('click', function() {
// Setel ulang nilai hitungan ke 0
hitungan = 0;
// Tampilkan kembali nilai 0 ke elemen h2
displayAngka.textContent = hitungan;
});
Hasil: Anda baru saja membuat aplikasi mini yang sepenuhnya interaktif! Angka akan bertambah saat tombol + diklik dan akan kembali ke 0 saat Reset diklik.
Kesimpulan Akhir: Selamat! Anda telah menyelesaikan perjalanan dasar-dasar JavaScript. Anda telah belajar bagaimana menyimpan data (Variabel), membuat keputusan (Kondisi), melakukan tugas berulang (Looping), dan yang terpenting, bagaimana menghubungkan semua logika tersebut ke halaman web yang sesungguhnya melalui DOM dan Event Listener.
Inilah siklus inti dari pengembangan web interaktif: Dengarkan Aksi Pengguna (Event) -> Jalankan Logika (JS) -> Ubah Tampilan Halaman (DOM). Dengan fondasi ini, Anda siap untuk menjelajahi konsep-konsep yang lebih canggih dan membangun proyek-proyek yang lebih besar
-
Lanjutan
Bab 10: Mendalami Fondasi - Functions, Scope, & Struktur Data Lanjutan
Di bab-bab sebelumnya, kita telah mempelajari “apa”-nya JavaScript. Sekarang, kita akan fokus pada “bagaimana”-nya—bagaimana menulis kode yang lebih bersih, efisien, dan terorganisir, persis seperti yang dilakukan oleh para profesional.
## 1. Functions (Fungsi) – Mesin Kode yang Bisa Digunakan Kembali ⚙️
Kita sudah sering menggunakan fungsi, seperti dalam addEventListener. Sekarang, mari kita pahami sepenuhnya.
Fungsi adalah blok kode yang dirancang untuk melakukan tugas tertentu. Blok kode ini bisa kita beri nama dan kita “panggil” atau gunakan kembali kapan pun kita butuhkan, tanpa harus menulis ulang kodenya.
Analogi: Bayangkan sebuah blender. Tugasnya adalah menghaluskan buah. Anda tidak perlu membuat blender baru setiap kali ingin membuat jus. Anda cukup menggunakan blender yang sama, memasukkan buah yang berbeda, dan mendapatkan hasilnya.
A. Anatomi Dasar Sebuah Fungsi
Ada tiga bagian utama:
Deklarasi: Membuat fungsinya menggunakan kata kunci
function.Parameter: “Bahan baku” atau input yang bisa diterima oleh fungsi. Ini bersifat opsional.
Return Value: “Hasil jadi” atau output yang bisa dikembalikan oleh fungsi. Ini juga opsional.
Contoh Kode:
// 1. DEKLARASI FUNGSI dengan PARAMETER 'nama'
// 'nama' adalah parameter, seperti slot kosong untuk diisi nanti.
function sapaPengguna(nama) {
const pesan = `Halo, ${nama}! Selamat datang.`; // Menggunakan Template Literals (ES6)
return pesan; // 3. RETURN VALUE: Mengembalikan hasil berupa string
}
// 2. MEMANGGIL FUNGSI
// "Budi" adalah argumen yang kita masukkan ke dalam parameter 'nama'
let sapaanUntukBudi = sapaPengguna("Budi");
console.log(sapaanUntukBudi); // Output: Halo, Budi! Selamat datang.
let sapaanUntukCitra = sapaPengguna("Citra");
console.log(sapaanUntukCitra); // Output: Halo, Citra! Selamat datang.
Mengapa ini penting? Anda cukup mendefinisikan logika sapaPengguna satu kali dan bisa menggunakannya untuk menyapa siapa pun. Ini membuat kode Anda DRY (Don’t Repeat Yourself).
## 2. Scope (Lingkup Variabel) – Di Mana Variabel Anda Tinggal 🏠
Scope adalah konsep yang menentukan di mana saja sebuah variabel dapat diakses di dalam kode Anda. Tidak semua variabel bisa diakses dari semua tempat.
Analogi: Bayangkan rumah Anda.
Global Scope: Barang di ruang keluarga (seperti TV). Siapa pun di dalam rumah bisa mengaksesnya.
Local Scope: Barang di kamar pribadi Anda (seperti buku harian). Hanya Anda yang berada di dalam kamar itu yang bisa mengaksesnya.
Global Scope: Variabel yang dibuat di luar fungsi mana pun.
Local Scope (Function Scope): Variabel yang dibuat di dalam sebuah fungsi.
Contoh Kode:
// Variabel ini ada di GLOBAL SCOPE
let namaSekolah = "MTs Sunan Pandanaran";
function tampilkanInfo() {
// Variabel ini ada di LOCAL SCOPE, hanya ada di dalam fungsi ini
let namaSiswa = "Ahmad";
// Kita bisa akses variabel global dari dalam fungsi
console.log(`Siswa ${namaSiswa} bersekolah di ${namaSekolah}.`);
}
tampilkanInfo(); // Output: Siswa Ahmad bersekolah di MTs Sunan Pandanaran.
// Tapi, kita TIDAK BISA akses variabel local dari luar fungsi!
// Baris di bawah ini akan menyebabkan ERROR: "namaSiswa is not defined"
// console.log(namaSiswa);
Mengapa ini penting? Scope melindungi variabel Anda dari perubahan yang tidak disengaja oleh bagian lain dari program Anda, sehingga membantu mencegah bug yang sulit dilacak.
## 3. Struktur Data Lanjutan 🏗️
Data di dunia nyata seringkali lebih kompleks. Kita bisa menyusun object dan array dengan lebih canggih.
Nested Object (Objek Bersarang): Sebuah objek yang menjadi nilai dari properti objek lain.
Contoh Kode
const dataSiswa = {
id: 101,
nama: "Citra Lestari",
kelas: "9A",
// Ini adalah NESTED OBJECT
alamat: {
jalan: "Jl. Kaliurang KM 14",
kota: "Sleman",
provinsi: "DIY"
}
};
// Cara mengakses data di dalam nested object
let kotaSiswa = dataSiswa.alamat.kota;
console.log(kotaSiswa); // Output: "Sleman"
Struktur ini sangat umum untuk mengelompokkan informasi yang saling berhubungan di bawah satu entitas utama.
## Implementasi Nyata di Dunia Kerja
Studi Kasus: Menampilkan Daftar Produk di Halaman E-commerce
Mari kita gabungkan semua konsep di atas untuk membuat fitur yang sangat umum: menampilkan daftar produk dan menghitung total harganya.
File JavaScript:
// --- DATA (Biasanya dari API/Server) ---
// Array of Objects, beberapa object memiliki Nested Object
const produk = [
{ id: 'p1', nama: 'Buku Tulis Keren', harga: 25000, stok: 10 },
{ id: 'p2', nama: 'Pulpen Cepat Kering', harga: 12000, stok: 5 },
{ id: 'p3', nama: 'Tas Ransel Gunung', harga: 350000, stok: 0 }
];
// --- FUNGSI ---
/**
* Fungsi ini mengambil satu object produk dan mengubahnya menjadi format HTML.
* Menggunakan: Functions, Parameters, Return Value.
*/
function buatKartuProduk(item) {
// Cek stok menggunakan kondisi (materi lama!)
let statusStok = (item.stok > 0) ? "Tersedia" : "Habis";
// Mengembalikan string HTML (Template Literals)
return `
<div class="kartu-produk">
<h3>${item.nama}</h3>
<p>Harga: Rp ${item.harga}</p>
<p>Stok: ${statusStok}</p>
</div>
`;
}
/**
* Fungsi untuk menampilkan semua produk ke halaman web.
*/
function tampilkanSemuaProduk() {
// 1. Pilih elemen 'wadah' di HTML
const wadahProduk = document.getElementById('daftar-produk');
let semuaKartuHTML = ''; // Variabel Local Scope
// 2. Loop melalui data produk
for(let i = 0; i < produk.length; i++) {
// Panggil fungsi buatKartuProduk untuk setiap item
semuaKartuHTML += buatKartuProduk(produk[i]);
}
// 3. Masukkan semua hasil HTML ke dalam 'wadah'
wadahProduk.innerHTML = semuaKartuHTML;
}
// --- EKSEKUSI ---
// Panggil fungsi utama untuk menjalankan semuanya saat halaman dimuat
tampilkanSemuaProduk();
File HTML terkait:
<h1>Daftar Produk Kami</h1>
<div id="daftar-produk">
</div>
Pembahasan:
Functions: Kita memecah masalah menjadi dua fungsi:
buatKartuProduk(fokus pada satu produk) dantampilkanSemuaProduk(fokus mengatur semuanya). Kode jadi sangat rapi!Scope: Variabel
semuaKartuHTMLhanya ada di dalamtampilkanSemuaProduk, tidak mengganggu bagian lain.Struktur Data: Kita bekerja dengan
Array of Objectsyang merupakan standar industri.
Kesimpulan: Dengan memahami Fungsi, Scope, dan Struktur Data Lanjutan, Anda tidak hanya menulis kode yang berjalan, tetapi juga kode yang profesional: bersih, mudah dibaca, bisa digunakan kembali, dan lebih mudah dikelola. Ini adalah lompatan besar dari seorang pemula menjadi seorang developer yang lebih andal
Bab 11: Konsep JavaScript Modern (ES6+) - Menulis Kode Lebih Cepat dan Lebih Baik
Bahasa JavaScript, sama seperti bahasa manusia, terus berevolusi. Pada tahun 2015, JavaScript mendapatkan pembaruan terbesar dalam sejarahnya yang disebut ES6 (ECMAScript 2015). Pembaruan ini dan yang setelahnya menambahkan banyak fitur baru yang kini menjadi standar di dunia kerja.
Mempelajari fitur-fitur ini akan membuat kode Anda lebih singkat, lebih mudah dibaca, dan lebih kuat.
Analogi: Ini seperti beralih dari ponsel model lama ke smartphone. Keduanya bisa menelepon (menjalankan kode), tetapi smartphone (ES6+) memiliki fitur-fitur canggih yang membuat segalanya lebih mudah dan efisien.
## 1. Arrow Functions (=>) 🏹
Arrow Function adalah cara penulisan fungsi yang lebih singkat dan ringkas. Ini adalah salah satu fitur ES6 yang paling sering digunakan.
Perbandingan Sintaks:
// Cara Lama (Function Expression)
const sapaLama = function(nama) {
return `Halo, ${nama}`;
};
// Cara Baru (Arrow Function)
const sapaBaru = (nama) => {
return `Halo, ${nama}`;
};
// Jika fungsinya sangat sederhana (hanya satu baris return),
// bisa lebih singkat lagi!
const sapaSuperSingkat = nama => `Halo, ${nama}`;
console.log(sapaSuperSingkat("Budi")); // Output: Halo, Budi
Arrow function sangat berguna di dalam event listener atau metode array, membuat kode terlihat jauh lebih rapi.
## 2. Template Literals (`)
Kita sudah pernah menyinggung ini, tapi mari kita perdalam. Template Literals adalah cara modern untuk bekerja dengan string. Anda tidak perlu lagi menggunakan tanda + untuk menggabungkan string dan variabel.
Anda cukup menggunakan backtick (`) dan memasukkan variabel di dalam ${...}.
Perbandingan Sintaks:
let nama = "Citra";
let umur = 14;
// Cara Lama (menyusahkan dan mudah salah)
let perkenalanLama = "Perkenalkan, nama saya " + nama + " dan saya berumur " + umur + " tahun.";
// Cara Baru (bersih dan mudah dibaca)
let perkenalanBaru = `Perkenalkan, nama saya ${nama} dan saya berumur ${umur} tahun.`;
console.log(perkenalanBaru);
Keuntungan lainnya adalah Anda bisa membuat string multi-baris dengan mudah, yang sangat berguna saat membuat template HTML di dalam JavaScript.
## 3. Array Methods Lanjutan (.forEach, .map, .filter)
Metode-metode ini adalah alternatif modern untuk for loop saat bekerja dengan array. Mereka membuat kode lebih deklaratif (Anda menjelaskan apa yang Anda mau, bukan bagaimana caranya).
A. .forEach() – Untuk Setiap Item
Gunakan .forEach() sebagai pengganti for loop ketika Anda hanya ingin melakukan sesuatu untuk setiap item di dalam array, tanpa membuat array baru.
const daftarBuah = ["Apel", "Jeruk", "Mangga"];
// Menggunakan forEach untuk menampilkan setiap buah
daftarBuah.forEach(function(buah) {
console.log(`Saya suka buah ${buah}`);
});
// Dengan Arrow Function, jadi lebih singkat!
daftarBuah.forEach(buah => console.log(`Saya suka buah ${buah}`));
B. .map() – Transformasi Menjadi Array Baru
Gunakan .map() ketika Anda ingin mengubah setiap item dari array asal dan membuat sebuah array baru dari hasil transformasi tersebut.
const angka = [1, 2, 3, 4];
// Menggunakan map untuk membuat array baru yang setiap angkanya dikali dua
const angkaDikaliDua = angka.map(a => a * 2);
console.log(angka); // Output: [1, 2, 3, 4] (array asli tidak berubah)
console.log(angkaDikaliDua); // Output: [2, 4, 6, 8] (array baru hasil transformasi)
C. .filter() – Menyaring Menjadi Array Baru
Gunakan .filter() ketika Anda ingin menyaring item dari array asal berdasarkan sebuah kondisi dan membuat sebuah array baru yang hanya berisi item yang lolos saringan.
const nilaiUjian = [85, 60, 92, 75, 55];
// Menggunakan filter untuk membuat array baru yang hanya berisi nilai yang lulus (>= 75)
const nilaiLulus = nilaiUjian.filter(nilai => nilai >= 75);
console.log(nilaiUjian); // Output: [85, 60, 92, 75, 55] (array asli tidak berubah)
console.log(nilaiLulus); // Output: [85, 92, 75] (array baru hasil saringan)
## Implementasi Nyata di Dunia Kerja
Studi Kasus: Fitur Filter Produk di Halaman E-commerce
Bayangkan Anda memiliki daftar produk dan ingin menampilkan hanya produk yang tersedia (stok > 0) dan harganya di bawah Rp 100.000. Ini adalah pekerjaan sempurna untuk metode array modern.
File JavaScript:
// Data produk kita
const produk = [
{ nama: 'Buku Tulis', harga: 25000, stok: 10 },
{ nama: 'Tas Ransel', harga: 350000, stok: 5 },
{ nama: 'Pulpen', harga: 12000, stok: 0 },
{ nama: 'Kotak Pensil', harga: 50000, stok: 20 }
];
const wadahProduk = document.getElementById('daftar-produk');
// --- Logika Filtering dan Display ---
// 1. FILTER produk yang stoknya ada DAN harganya di bawah 100rb
const produkTersediaMurah = produk
.filter(item => item.stok > 0) // Ambil yang stoknya > 0
.filter(item => item.harga < 100000); // Dari hasil itu, ambil lagi yang harganya < 100rb
// 2. MAP hasil filter menjadi format HTML menggunakan Template Literals
const produkHTML = produkTersediaMurah.map(item => `
<div class="kartu-produk">
<h3>${item.nama}</h3>
<p>Harga: Rp ${item.harga}</p>
</div>
`).join(''); // .join('') untuk menggabungkan semua string HTML menjadi satu
// 3. Tampilkan hasilnya ke DOM
wadahProduk.innerHTML = produkHTML;
Pembahasan: Lihat betapa bersih dan mudah dibacanya kode di atas! Kita tidak perlu menulis for loop yang rumit. Kita cukup merangkai (chaining) metode .filter() dan .map() untuk mendapatkan hasil akhir yang kita inginkan. Ini adalah pola pikir yang sangat umum di pengembangan web modern.
Kesimpulan: Fitur ES6+ bukan hanya “gula sintaksis”. Mereka mendorong cara penulisan kode yang lebih baik, lebih aman, dan lebih mudah dipelihara. Menguasai Arrow Functions, Template Literals, dan Metode Array Modern akan secara signifikan meningkatkan kualitas dan kecepatan Anda dalam membuat aplikasi web.
Bab 12: Berinteraksi dengan Dunia Luar - API & JavaScript Asinkron
Sejauh ini, semua data yang kita gunakan (seperti daftar produk atau kontak) kita tulis langsung di dalam file JavaScript. Ini disebut hard-coding. Di dunia nyata, aplikasi web yang dinamis mendapatkan datanya dari sumber lain, seperti database di sebuah server.
Pertanyaannya: Bagaimana cara JavaScript kita “meminta” data dari server tersebut? Jawabannya adalah API.
Apa itu API? 🗣️
API adalah singkatan dari Application Programming Interface. Secara sederhana, API adalah seperangkat aturan yang memungkinkan satu aplikasi “berbicara” dengan aplikasi lainnya.
Analogi Restoran:
Anda (Kode JavaScript): Pengunjung yang ingin memesan makanan.
Dapur (Server/Database): Tempat makanan (data) dibuat dan disimpan.
Menu (Dokumentasi API): Daftar pesanan yang bisa Anda minta.
Pelayan (
fetchAPI): Penghubung antara Anda dan dapur. Anda memberi tahu pelayan apa yang Anda mau dari menu, pelayan pergi ke dapur, lalu kembali membawakan pesanan Anda.
Di dunia web, kita menggunakan API untuk meminta data (misalnya, daftar video dari YouTube, data cuaca, atau postingan terbaru dari Instagram) dari server mereka.
JSON: Bahasa Universal untuk Data
Saat kita meminta data dari API, server biasanya akan mengirimkannya kembali dalam format bernama JSON (JavaScript Object Notation).
Kabar baiknya, format JSON terlihat hampir identik dengan Object dan Array di JavaScript yang sudah kita pelajari! Ini membuatnya sangat mudah untuk digunakan di dalam kode kita.
Contoh data JSON dari sebuah API:
{
"namaProduk": "Tas Ransel Keren",
"harga": 350000,
"tersedia": true,
"review": [
{ "user": "Budi", "rating": 5 },
{ "user": "Citra", "rating": 4 }
]
}
Tantangan: Proses “Menunggu” ⏳
Meminta data dari server melalui internet membutuhkan waktu—bisa beberapa milidetik, bahkan beberapa detik. Jika JavaScript harus berhenti dan menunggu sampai data datang, maka seluruh halaman web kita akan macet (freeze). Pengguna tidak akan bisa mengklik tombol atau bahkan scroll.
Untuk mengatasi ini, kita menggunakan JavaScript Asinkron (Asynchronous JavaScript).
Analogi: Mengirim Pesan vs. Menelepon
Sinkron (Cara Lama/Buruk): Menelepon. Anda harus menunggu sampai orang di seberang menjawab dan menyelesaikan percakapan sebelum bisa melakukan hal lain.
Asinkron (Cara Modern/Baik): Mengirim pesan chat. Anda mengirim pesan, lalu Anda bisa melakukan aktivitas lain. Anda akan mendapat notifikasi saat pesan balasan (data) tiba, dan baru saat itu Anda akan membacanya.
JavaScript modern menggunakan Promise yang dikelola dengan sintaks async/await untuk menangani proses asinkron ini dengan sangat elegan.
async: Kata kunci yang kita letakkan sebelum sebuah fungsi untuk memberitahu JavaScript bahwa fungsi ini mungkin akan melakukan proses “menunggu”.await: Kata kunci yang kita gunakan di dalamasync functionuntuk memberitahu JavaScript, “Tolong berhenti sejenak di baris ini dan tunggu sampai proses ini selesai sebelum lanjut ke baris berikutnya.”
fetch(): “Pelayan” Bawaan JavaScript
Browser modern sudah menyediakan “pelayan” bawaan untuk meminta data dari API, yaitu fetch() API.
Sintaks Modern dengan async/await:
// 'async' menandakan fungsi ini bersifat asinkron
async function ambilDataDariServer() {
try {
// 'await' menyuruh JS menunggu sampai fetch selesai mengambil data
const response = await fetch('https://api.contoh.com/data');
// 'await' lagi untuk menunggu proses mengubah respons menjadi JSON
const data = await response.json();
// Sekarang kita bisa menggunakan datanya!
console.log(data);
} catch (error) {
// Blok 'catch' akan menangkap jika terjadi error (misal: internet mati)
console.error("Oops, terjadi kesalahan!", error);
}
}
Struktur try...catch digunakan untuk menangani error dengan baik.
Implementasi Nyata di Dunia Kerja
Studi Kasus: Membuat Generator Kutipan Acak (Random Quote Generator) Kita akan menggunakan API publik gratis untuk mengambil kutipan acak dan menampilkannya di halaman kita.
API yang digunakan: https://api.quotable.io/random
File HTML:
<h1>Random Quote Generator</h1>
<div id="wadah-kutipan">
<blockquote id="teks-kutipan">...</blockquote>
<p id="penulis-kutipan"></p>
</div>
<button id="tombol-kutipan-baru">Dapatkan Kutipan Baru</button>
File JavaScript:
// 1. PILIH ELEMEN
const displayKutipan = document.getElementById('teks-kutipan');
const displayPenulis = document.getElementById('penulis-kutipan');
const tombolBaru = document.getElementById('tombol-kutipan-baru');
// 2. BUAT FUNGSI ASINKRON UNTUK MENGAMBIL DATA
async function dapatkanKutipanBaru() {
displayKutipan.textContent = 'Memuat...'; // Memberi tahu pengguna bahwa proses sedang berjalan
displayPenulis.textContent = '';
try {
// Gunakan fetch untuk mengambil data dari API
const response = await fetch('https://api.quotable.io/random');
const data = await response.json();
// 3. TAMPILKAN DATA KE DOM
displayKutipan.textContent = data.content; // 'content' adalah properti dari API
displayPenulis.textContent = `- ${data.author}`; // 'author' adalah properti dari API
} catch(error) {
displayKutipan.textContent = 'Gagal memuat kutipan. Coba lagi nanti.';
console.error("Terjadi kesalahan saat fetch:", error);
}
}
// 4. PASANG EVENT LISTENER PADA TOMBOL
tombolBaru.addEventListener('click', dapatkanKutipanBaru);
// 5. PANGGIL FUNGSI SAAT PERTAMA KALI HALAMAN DIBUKA
dapatkanKutipanBaru();
Hasil: Anda baru saja membuat aplikasi web yang mengambil data langsung dari internet dan menampilkannya secara dinamis. Setiap kali tombol diklik, sebuah permintaan baru akan dikirim ke server API.
Kesimpulan: Kemampuan untuk berinteraksi dengan API adalah salah satu keahlian paling fundamental dan penting bagi seorang web developer modern. Ini mengubah aplikasi Anda dari yang tadinya statis dan terisolasi, menjadi aplikasi yang dinamis, kaya akan data, dan terhubung dengan ekosistem internet yang lebih luas.
Bab 13: Proyek Praktik - Membuat Aplikasi To-Do List Interaktif
Selamat! Anda telah mempelajari semua konsep dasar yang dibutuhkan untuk menjadi seorang front-end developer. Namun, pengetahuan sejati datang dari praktik. Di bab ini, kita akan berhenti belajar konsep baru dan mulai membangun sesuatu.
Analogi: Belajar pemrograman itu seperti belajar memasak. Anda sudah belajar cara memotong sayur (variabel), cara menggunakan kompor (kondisi & loop), dan cara membaca resep (DOM & Event). Sekarang, saatnya kita masuk ke dapur dan memasak sebuah hidangan lengkap dari awal sampai akhir.
Kita akan membangun salah satu proyek paling fundamental dan bermanfaat bagi pemula: sebuah Aplikasi To-Do List.
Fitur Utama Aplikasi Kita:
Menambahkan Tugas Baru: Pengguna bisa mengetik tugas di sebuah input dan menambahkannya ke dalam daftar.
Menampilkan Daftar Tugas: Semua tugas yang ditambahkan akan tampil di layar.
Menandai Tugas Selesai: Pengguna bisa mengklik sebuah tugas untuk menandainya sebagai selesai (tugas akan dicoret).
Menghapus Tugas: Pengguna bisa menghapus tugas yang sudah tidak relevan.
Langkah 1: Menyiapkan Kerangka (HTML)
Pertama, kita buat struktur dasar HTML-nya. Buat file index.html.
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Aplikasi To-Do List</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="app">
<h1>Daftar Tugasku</h1>
<form id="form-tugas">
<input
type="text"
id="input-tugas"
placeholder="Mau mengerjakan apa hari ini?"
autocomplete="off"
/>
<button type="submit">Tambah</button>
</form>
<section id="daftar-tugas-container">
</section>
</main>
<script src="script.js"></script>
</body>
</html>
Langkah 2: Memberi Tampilan (CSS)
Selanjutnya, buat file style.css untuk memberikan tampilan yang bersih dan fungsional.
/* (Letakkan kode CSS ini di file style.css) */
body {
font-family: sans-serif;
background-color: #f4f7f9;
color: #333;
display: flex;
justify-content: center;
padding-top: 50px;
}
.app {
width: 100%;
max-width: 500px;
background-color: #fff;
border-radius: 8px;
padding: 30px;
box-shadow: 0 4px 10px rgba(0,0,0,0.1);
}
h1 { text-align: center; color: #2c3e50; }
form { display: flex; margin-bottom: 20px; }
#input-tugas {
flex-grow: 1;
padding: 10px;
border: 1px solid #ddd;
border-radius: 5px 0 0 5px;
}
form button {
padding: 10px 15px;
border: none;
background-color: #3498db;
color: white;
cursor: pointer;
border-radius: 0 5px 5px 0;
}
.item-tugas {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px;
border-bottom: 1px solid #eee;
cursor: pointer;
}
.item-tugas.selesai .teks-tugas {
text-decoration: line-through;
color: #95a5a6;
}
.tombol-hapus {
background-color: #e74c3c;
color: white;
border: none;
padding: 5px 10px;
border-radius: 5px;
cursor: pointer;
}
Langkah 3: Menambahkan Otak (JavaScript)
Ini adalah bagian utamanya. Buat file script.js. Kita akan membangunnya langkah demi langkah.
// ==== BAGIAN SETUP ====
// 1. Pilih semua elemen HTML yang dibutuhkan
const formTugas = document.getElementById('form-tugas');
const inputTugas = document.getElementById('input-tugas');
const daftarTugasContainer = document.getElementById('daftar-tugas-container');
// 2. Siapkan "database" kita: sebuah array untuk menyimpan semua object tugas
let daftarTugas = [];
// ==== BAGIAN FUNGSI ====
// 3. Fungsi untuk menampilkan (me-render) semua tugas ke layar
function renderTugas() {
// Kosongkan dulu containernya agar tidak ada duplikat
daftarTugasContainer.innerHTML = '';
// Loop melalui array 'daftarTugas' menggunakan forEach
daftarTugas.forEach(function(tugas) {
// Buat elemen div baru untuk setiap tugas
const divTugas = document.createElement('div');
divTugas.classList.add('item-tugas');
// Tambahkan class 'selesai' jika tugasnya sudah selesai
if (tugas.selesai) {
divTugas.classList.add('selesai');
}
// Buat elemen span untuk teks tugas
const spanTeks = document.createElement('span');
spanTeks.classList.add('teks-tugas');
spanTeks.textContent = tugas.teks;
// Event listener untuk menandai selesai saat teks diklik
spanTeks.addEventListener('click', function() {
toggleSelesai(tugas.id);
});
// Buat tombol hapus
const tombolHapus = document.createElement('button');
tombolHapus.classList.add('tombol-hapus');
tombolHapus.textContent = 'Hapus';
// Event listener untuk menghapus tugas saat tombol diklik
tombolHapus.addEventListener('click', function() {
hapusTugas(tugas.id);
});
// Masukkan span dan tombol ke dalam div tugas
divTugas.appendChild(spanTeks);
divTugas.appendChild(tombolHapus);
// Masukkan div tugas ke dalam container utama
daftarTugasContainer.appendChild(divTugas);
});
}
// 4. Fungsi untuk menambah tugas baru
function tambahTugas(teks) {
const tugasBaru = {
id: Date.now(), // Gunakan timestamp sebagai ID unik
teks: teks,
selesai: false
};
daftarTugas.push(tugasBaru);
renderTugas(); // Setelah menambah, render ulang daftarnya
}
// 5. Fungsi untuk menghapus tugas berdasarkan ID
function hapusTugas(id) {
// Buat array baru yang isinya semua tugas KECUALI yang ID-nya cocok
daftarTugas = daftarTugas.filter(tugas => tugas.id !== id);
renderTugas(); // Render ulang
}
// 6. Fungsi untuk mengubah status selesai/belum selesai (toggle)
function toggleSelesai(id) {
daftarTugas.forEach(function(tugas) {
if (tugas.id === id) {
tugas.selesai = !tugas.selesai; // Balikkan nilainya (true -> false, false -> true)
}
});
renderTugas(); // Render ulang
}
// ==== BAGIAN EVENT LISTENERS ====
// 7. Event listener untuk form submission (saat tombol 'Tambah' diklik)
formTugas.addEventListener('submit', function(event) {
event.preventDefault(); // Mencegah halaman refresh saat form disubmit
const teksTugasBaru = inputTugas.value;
if (teksTugasBaru.trim() !== '') { // Pastikan input tidak kosong
tambahTugas(teksTugasBaru);
inputTugas.value = ''; // Kosongkan kembali inputnya
}
});
// Render awal saat halaman pertama kali dimuat (jika ada data awal)
renderTugas();
Implementasi Dunia Kerja
Proyek To-Do List ini, meskipun sederhana, meniru arsitektur dari hampir semua aplikasi web modern:
State Management (Manajemen Data): Array
daftarTugasadalah “state” atau “sumber kebenaran tunggal” dari aplikasi kita. Semua yang tampil di layar adalah representasi visual dari data di dalam array ini. Aplikasi raksasa seperti Facebook atau Tokopedia juga memiliki “state”, hanya saja jauh lebih kompleks.Rendering Berdasarkan State: Fungsi
renderTugas()adalah inti dari aplikasi ini. Ia menunjukkan sebuah prinsip fundamental dari framework modern seperti React atau Vue: UI (Tampilan) adalah sebuah fungsi dari State (Data). Setiap kali data berubah (tambah, hapus, update), kita cukup menjalankan ulang fungsi render untuk memperbarui tampilan.Modularitas: Kita memecah logika menjadi fungsi-fungsi kecil yang bertanggung jawab atas satu hal saja (
tambahTugas,hapusTugas,renderTugas). Ini membuat kode lebih mudah dibaca, diuji, dan dikelola.
Kesimpulan & Tantangan Selanjutnya
Selamat! Anda baru saja membangun sebuah aplikasi web interaktif yang lengkap dari nol. Proyek ini mengikat semua konsep yang telah kita pelajari: variabel, array, object, kondisi, loop, fungsi, seleksi DOM, manipulasi DOM, dan event listener.
Tantangan Selanjutnya: Aplikasi kita saat ini akan kehilangan semua datanya saat halaman di-refresh. Tantangan Anda berikutnya adalah: Bagaimana cara menyimpan daftar tugas agar tidak hilang?
Petunjuk: Cari tahu tentang
localStoragedi JavaScript. Ini adalah fitur browser yang memungkinkan Anda menyimpan data string sederhana yang akan tetap ada bahkan setelah browser ditutup. Anda perlu mengubah arraydaftarTugasmenjadi string (menggunakanJSON.stringify()) sebelum menyimpannya, dan mengubahnya kembali menjadi array (menggunakanJSON.parse()) saat mengambilnya.
Semangat mencoba! Anda sekarang memiliki fondasi yang sangat kuat untuk terus berkembang.
Tantangan Lanjutan: Menyimpan Data dengan localStorage
Tantangan Lanjutan: Menyimpan Data dengan localStorage
Saat ini, setiap kali Anda me-refresh halaman aplikasi To-Do List, semua tugas yang sudah Anda masukkan akan hilang. Ini terjadi karena variabel JavaScript hanya hidup selama halaman tersebut terbuka. Ketika halaman dimuat ulang, semua skrip dijalankan dari awal dan variabel daftarTugas kita kembali menjadi array kosong.
Untuk mengatasi ini, kita perlu cara untuk menyimpan data secara permanen di browser pengguna. Solusinya adalah Web Storage, dan kita akan menggunakan salah satu jenisnya yang paling umum: localStorage.
## 1. Apa itu localStorage?
localStorage adalah sebuah media penyimpanan kecil yang ada di dalam browser. Anggap saja ini seperti papan tulis atau sticky note digital yang diberikan oleh browser untuk setiap website.
Setiap website (domain) memiliki “papan tulis”-nya sendiri. Data yang disimpan oleh
google.comtidak bisa dibaca olehfacebook.com.Data yang disimpan di
localStorageakan bertahan selamanya, bahkan setelah Anda menutup browser atau me-restart komputer. Data ini hanya akan hilang jika dihapus secara manual.localStoragemenyimpan data dalam format key-value pair (pasangan kunci-nilai).
## 2. Perintah Dasar localStorage
Ada empat perintah utama yang perlu Anda ketahui:
Menyimpan data:
localStorage.setItem('kunci', 'nilai');Mengambil data:
localStorage.getItem('kunci');Menghapus satu item data:
localStorage.removeItem('kunci');Menghapus semua data:
localStorage.clear();
Contoh Sederhana:
// Menyimpan nama pengguna
localStorage.setItem('username', 'Budi Sanjaya');
// Mengambil nama pengguna
const namaTersimpan = localStorage.getItem('username');
console.log(namaTersimpan); // Output: "Budi Sanjaya"
// Menghapus item
// localStorage.removeItem('username');
## 3. Tantangan: localStorage Hanya Menyimpan String!
Ini adalah bagian yang paling penting. localStorage tidak bisa menyimpan Array atau Object secara langsung. Ia hanya bisa menyimpan data dalam bentuk String.
Padahal, data daftarTugas kita adalah sebuah Array of Objects. Jadi, bagaimana solusinya?
Kita perlu mengubah Array/Object kita menjadi format JSON String sebelum menyimpannya, dan mengubahnya kembali menjadi Array/Object saat kita mengambilnya.
JSON.stringify(data): Mengubah Array atau Object menjadi JSON String (proses “membekukan”).JSON.parse(string): Mengubah JSON String kembali menjadi Array atau Object (proses “mencairkan”).
Contoh Konversi:
const tugas = [{ id: 1, teks: 'Belajar JavaScript' }];
// 1. Ubah array menjadi string
const tugasString = JSON.stringify(tugas);
console.log(tugasString); // Output: '[{"id":1,"teks":"Belajar JavaScript"}]' (ini adalah string)
// Simpan string ini ke localStorage
localStorage.setItem('tugas', tugasString);
// 2. Ambil string dari localStorage dan ubah kembali menjadi array
const dataDariStorage = localStorage.getItem('tugas');
const tugasAsli = JSON.parse(dataDariStorage);
console.log(tugasAsli); // Output: [{ id: 1, teks: 'Belajar JavaScript' }] (kembali menjadi array)
## 4. Implementasi: Meng-upgrade Aplikasi To-Do List
Sekarang, mari kita terapkan konsep ini ke dalam proyek kita. Buka file script.js Anda dan lakukan modifikasi berikut.
Langkah 1: Buat Fungsi untuk Menyimpan Data Kita akan membuat satu fungsi khusus yang tugasnya hanya menyimpan array daftarTugas ke localStorage.
// Tambahkan fungsi ini di BAGIAN FUNGSI
function simpanTugasKeStorage() {
localStorage.setItem('daftarTugas', JSON.stringify(daftarTugas));
}
Langkah 2: Panggil Fungsi simpanTugasKeStorage() Setiap Kali Data Berubah Kita harus memanggil fungsi ini setiap kali ada perubahan pada array daftarTugas.
Di dalam fungsi
tambahTugas(), tambahkansimpanTugasKeStorage();di baris terakhir.Di dalam fungsi
hapusTugas(), tambahkansimpanTugasKeStorage();di baris terakhir.Di dalam fungsi
toggleSelesai(), tambahkansimpanTugasKeStorage();di baris terakhir.
Langkah 3: Muat Data dari localStorage Saat Halaman Dibuka Ini adalah kunci agar data tidak hilang saat di-refresh.
Di paling atas file
script.jsAnda, ubah bagian “database” kita.
// Modifikasi bagian ini di paling atas
let daftarTugas = []; // Defaultnya tetap array kosong
// Cek apakah ada data di localStorage
const dataTersimpan = localStorage.getItem('daftarTugas');
// Jika ada data, 'cairkan' dan masukkan ke array daftarTugas
if (dataTersimpan) {
daftarTugas = JSON.parse(dataTersimpan);
}
// ... sisa kode Anda ...
Kode script.js Anda yang sudah di-upgrade akan terlihat seperti ini:
// ==== BAGIAN SETUP ====
const formTugas = document.getElementById('form-tugas');
const inputTugas = document.getElementById('input-tugas');
const daftarTugasContainer = document.getElementById('daftar-tugas-container');
// BARU: Cek dan muat data dari localStorage saat halaman dibuka
let daftarTugas = JSON.parse(localStorage.getItem('daftarTugas')) || [];
// ==== BAGIAN FUNGSI ====
// BARU: Fungsi untuk menyimpan state ke localStorage
function simpanTugasKeStorage() {
localStorage.setItem('daftarTugas', JSON.stringify(daftarTugas));
}
function renderTugas() { /* ... (kode fungsi ini tidak berubah) ... */ }
function tambahTugas(teks) {
// ... (logika tambah tugas tidak berubah) ...
daftarTugas.push(tugasBaru);
simpanTugasKeStorage(); // BARU: Panggil fungsi simpan
renderTugas();
}
function hapusTugas(id) {
daftarTugas = daftarTugas.filter(tugas => tugas.id !== id);
simpanTugasKeStorage(); // BARU: Panggil fungsi simpan
renderTugas();
}
function toggleSelesai(id) {
// ... (logika toggle tidak berubah) ...
simpanTugasKeStorage(); // BARU: Panggil fungsi simpan
renderTugas();
}
// ==== BAGIAN EVENT LISTENERS ====
// ... (kode di bagian ini tidak berubah) ...
// ==== RENDER AWAL ====
renderTugas(); // Sekarang ini akan me-render data yang sudah tersimpan
Sekarang coba jalankan aplikasi Anda. Tambahkan beberapa tugas, lalu refresh browser Anda. Tugas-tugas tersebut akan tetap ada!
Implementasi Dunia Kerja
localStorage adalah alat yang sangat sering digunakan oleh developer profesional untuk:
Menyimpan Preferensi Pengguna: Seperti pilihan tema “Dark Mode” atau “Light Mode”.
Mengingat Isi Keranjang Belanja: Jika Anda memasukkan barang ke keranjang di e-commerce lalu menutup browser, barang tersebut seringkali masih ada saat Anda kembali. Ini disimpan di
localStorage(jika Anda belum login).Caching Data Sederhana: Menyimpan data dari API untuk sementara agar tidak perlu memintanya berulang kali, sehingga mempercepat waktu muat halaman.
Kesimpulan: Anda baru saja menambahkan fitur persistensi data ke aplikasi Anda, sebuah langkah besar dari halaman web sederhana menjadi aplikasi web yang sesungguhnya. Dengan localStorage dan JSON, Anda bisa menciptakan pengalaman pengguna yang jauh lebih baik karena aplikasi Anda bisa “mengingat” pilihan dan data mereka
-
Mini Project
Kartu Profil Digital Interaktif 📇
Tujuan Proyek: Membuat sebuah halaman web statis yang menampilkan kartu profil digital. Semua data profil (seperti nama, kelas, hobi, dll.) tidak ditulis langsung di HTML, melainkan disimpan dalam variabel JavaScript dan kemudian ditampilkan secara dinamis ke halaman web.
Materi yang Digunakan:
HTML: Untuk membuat struktur atau kerangka kartu profil.
CSS: Untuk mendesain dan mempercantik tampilan kartu profil.
JavaScript:
Variabel & Tipe Data: Menyimpan informasi profil (Nama: String, Umur: Number, dll).
Object: Mengelompokkan semua data profil menjadi satu kesatuan.
Array: Menyimpan daftar hobi atau prestasi.
(Bonus) DOM Manipulation: Menampilkan data dari JavaScript ke dalam elemen HTML.
Instruksi Tugas untuk Siswa
Langkah 1: Membuat Struktur HTML (Kerangka Kartu) 뼈대
Buat file baru bernama index.html. Di dalamnya, buat struktur dasar untuk kartu profil. Kamu bisa menggunakan div sebagai wadah utama kartu dan elemen lain seperti img, h1, p, dan ul untuk isinya.
Penting: Beri id unik pada setiap elemen yang akan kita isi dengan JavaScript nanti.
Contoh index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kartu Profil Digital</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="kartu-profil">
<img id="foto-profil" src="https://via.placeholder.com/150" alt="Foto Profil">
<h1 id="nama-lengkap"></h1>
<p id="deskripsi"></p>
<hr>
<h3>Hobi:</h3>
<ul id="daftar-hobi">
</ul>
</div>
<script src="script.js"></script>
</body>
</html>
Langkah 2: Menghias dengan CSS (Mempercantik Kartu) 🎨
Buat file style.css untuk membuat kartu profilmu terlihat menarik. Kamu bebas berkreasi!
Contoh style.css:
body {
font-family: Arial, sans-serif;
background-color: #f0f2f5;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.kartu-profil {
background-color: white;
width: 300px;
padding: 20px;
border-radius: 15px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
text-align: center;
}
#foto-profil {
width: 120px;
height: 120px;
border-radius: 50%; /* Membuat gambar menjadi bulat */
object-fit: cover;
border: 3px solid #ddd;
}
#nama-lengkap {
margin: 10px 0;
color: #333;
}
#deskripsi {
color: #777;
font-size: 14px;
}
#daftar-hobi {
list-style-type: none; /* Menghilangkan bulatan pada list */
padding: 0;
margin-top: 10px;
}
#daftar-hobi li {
background-color: #e7f3ff;
color: #0056b3;
display: inline-block; /* Membuat list menjadi horizontal */
padding: 5px 10px;
border-radius: 15px;
margin: 5px;
font-size: 12px;
}
Langkah 3: Mengisi Data dengan JavaScript (Otak Kartu) 🧠
Ini adalah bagian terpenting! Buat file script.js. Di file ini, kita akan menyimpan semua data di dalam sebuah object.
Buat sebuah object JavaScript bernama
dataSiswa.Isi object tersebut dengan data dirimu atau karakter fiksi favoritmu. Pastikan kamu menggunakan:
Tipe data String: untuk
nama,kelas,quote.Tipe data Number: untuk
umur.Array: untuk menyimpan daftar
hobi.(Bonus) Object di dalam Object: untuk
mediaSosial.
Contoh script.js (Bagian 1 – Data):
// LANGKAH 3: MENYIMPAN DATA DALAM OBJECT
// =====================================
const dataSiswa = {
nama: "Budi Santoso",
umur: 14,
kelas: "8A",
foto: "path/ke/fotomu.jpg", // Ganti dengan link fotomu atau biarkan placeholder
deskripsi: "Siswa SMPN 1 Maju Jaya yang suka belajar coding dan bermain basket.",
hobi: ["Membaca Buku", "Coding", "Basket", "Main Game"],
mediaSosial: {
instagram: "budisantoso.ig",
twitter: "buditwit"
}
};
Langkah 4: Menampilkan Data JavaScript ke HTML ✨
Masih di file script.js, sekarang kita akan mengambil data dari object dataSiswa dan menampilkannya di elemen HTML yang sudah kita siapkan.
Gunakan document.getElementById() untuk memilih elemen HTML, lalu ubah isinya menggunakan data dari object.
Contoh script.js (Bagian 2 – Menampilkan Data):
// ... (kode dari Langkah 3) ...
// LANGKAH 4: MENAMPILKAN DATA DARI OBJECT KE HTML
// =============================================
// Mengambil elemen HTML berdasarkan ID-nya
let elemenFoto = document.getElementById("foto-profil");
let elemenNama = document.getElementById("nama-lengkap");
let elemenDeskripsi = document.getElementById("deskripsi");
let elemenDaftarHobi = document.getElementById("daftar-hobi");
// Mengisi konten elemen HTML dengan data dari object
elemenFoto.src = dataSiswa.foto; // Mengubah sumber gambar
elemenNama.textContent = dataSiswa.nama;
elemenDeskripsi.textContent = `Siswa kelas ${dataSiswa.kelas}, umur ${dataSiswa.umur} tahun. ${dataSiswa.deskripsi}`;
// Mengisi daftar hobi menggunakan perulangan (looping)
for (let i = 0; i < dataSiswa.hobi.length; i++) {
// 1. Buat elemen <li> baru
let itemHobiBaru = document.createElement("li");
// 2. Isi konten elemen <li> dengan hobi dari array
itemHobiBaru.textContent = dataSiswa.hobi[i];
// 3. Masukkan elemen <li> yang sudah diisi ke dalam <ul>
elemenDaftarHobi.appendChild(itemHobiBaru);
}
Kriteria Penilaian
| Kriteria | Bobot | Deskripsi |
| Struktur HTML | 20% | Penggunaan tag HTML yang benar dan pemberian id yang sesuai. |
| Styling CSS | 25% | Tampilan kartu yang rapi, kreatif, dan responsif (terlihat bagus). |
| Struktur Data JS | 35% | Object dibuat dengan benar, menggunakan tipe data string, number, dan array. |
| Integrasi JS & HTML | 20% | Semua data dari object JavaScript berhasil ditampilkan dengan benar di halaman web. |
Galeri Produk Interaktif 🛍️
Mini Project Lanjutan: Galeri Produk Interaktif 🛍️
Tujuan Proyek: Saatnya naik level! Kali ini kita akan membuat halaman galeri yang menampilkan beberapa produk. Data semua produk akan disimpan dalam sebuah Array of Objects. Kita akan menggunakan looping untuk menampilkan setiap produk, dan if/else untuk memberikan label khusus pada produk tertentu (misalnya, produk yang sedang diskon atau stoknya habis).
Materi yang Digunakan:
HTML: Sebagai wadah utama untuk galeri produk.
CSS: Mendesain kartu-kartu produk agar terlihat menarik dan profesional.
JavaScript:
Array of Objects: Menyimpan data untuk banyak produk dalam satu variabel.
Looping (
for): Memproses setiap produk di dalam array secara otomatis untuk ditampilkan.Kondisional (
if/else): Mengecek kondisi setiap produk (mis. apakah stoknya ada?) dan memberikan tampilan yang berbeda berdasarkan kondisi tersebut.DOM Manipulation (Lanjutan): Membuat elemen HTML baru (
div,img,p) sepenuhnya dari JavaScript.
Instruksi Tugas untuk Siswa
Langkah 1: Membuat Struktur HTML (Wadah Galeri) 뼈대
Buat file index.html. Kali ini, HTML kita akan sangat simpel. Kita hanya butuh satu div utama sebagai “kanvas” tempat JavaScript akan “melukis” semua kartu produk.
Contoh index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Galeri Produk Keren</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Toko Aksesoris Gaming</h1>
<div id="galeri-produk" class="container-galeri"></div>
<script src="script.js"></script>
</body>
</html>
Langkah 2: Menghias dengan CSS (Desain Kartu Produk) 🎨
Buat file style.css. Karena elemen kartu produk akan dibuat oleh JavaScript, kita akan mendesain class yang nantinya akan kita berikan pada elemen tersebut.
Contoh style.css:
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
}
h1 {
text-align: center;
color: #333;
}
.container-galeri {
display: flex;
flex-wrap: wrap; /* Agar kartu bisa pindah ke baris baru */
justify-content: center;
gap: 20px; /* Jarak antar kartu */
}
/* DESAIN KARTU UTAMA */
.kartu-produk {
background-color: white;
width: 250px;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
overflow: hidden; /* Agar gambar tidak keluar dari border-radius */
text-align: center;
padding-bottom: 15px;
}
.kartu-produk img {
width: 100%;
height: 180px;
object-fit: cover;
}
.kartu-produk h3 {
margin: 15px 0 5px 0;
}
.kartu-produk .harga {
color: #007bff;
font-weight: bold;
font-size: 1.1em;
}
/* DESAIN UNTUK LABEL KONDISIONAL (PENTING!) */
.label-stok {
padding: 8px 12px;
margin: 15px;
border-radius: 5px;
color: white;
font-weight: bold;
}
.tersedia {
background-color: #28a745; /* Hijau */
}
.habis {
background-color: #dc3545; /* Merah */
}
Langkah 3: Menyiapkan Data di JavaScript (Katalog Produk) 🧠
Buat file script.js. Langkah pertama adalah membuat sebuah array yang berisi beberapa object. Setiap object merepresentasikan satu produk.
Pastikan setiap object produk memiliki properti yang akan kita gunakan untuk logika if/else, misalnya stok.
Contoh script.js (Bagian 1 – Data):
// Data produk kita dalam bentuk Array of Objects
const daftarProduk = [
{
nama: "Keyboard Mechanical REXUS",
harga: "Rp 550.000",
gambar: "https://via.placeholder.com/250/aabbcc/ffffff?text=Keyboard",
stok: 15
},
{
nama: "Mouse Gaming LOGITECH",
harga: "Rp 320.000",
gambar: "https://via.placeholder.com/250/ffc107/000000?text=Mouse",
stok: 0 // Stok habis!
},
{
nama: "Headset Gaming HYPERX",
harga: "Rp 890.000",
gambar: "https://via.placeholder.com/250/28a745/ffffff?text=Headset",
stok: 8
},
{
nama: "Mousepad Custom",
harga: "Rp 120.000",
gambar: "https://via.placeholder.com/250/6c757d/ffffff?text=Mousepad",
stok: 25
}
];
Langkah 4: Logika Menampilkan Produk dengan Looping & If/Else ✨
Ini adalah bagian paling seru! Kita akan menggunakan looping untuk “membaca” setiap produk satu per satu dari array daftarProduk, lalu membuat kartu HTML-nya dan menambahkannya ke halaman web.
Di dalam loop, kita akan menggunakan if/else untuk mengecek nilai stok.
ifstok lebih dari 0, tampilkan label “Tersedia”.else(jika stok 0), tampilkan label “Stok Habis”.
Contoh script.js (Bagian 2 – Logika):
// ... (kode dari Langkah 3) ...
// Mengambil elemen div "kanvas" kita
const galeriContainer = document.getElementById("galeri-produk");
// LOOPING untuk setiap produk di dalam array daftarProduk
for (let i = 0; i < daftarProduk.length; i++) {
let produk = daftarProduk[i]; // Ambil satu object produk
// 1. Membuat elemen-elemen HTML baru
let kartuDiv = document.createElement("div");
let gambarProduk = document.createElement("img");
let namaProduk = document.createElement("h3");
let hargaProduk = document.createElement("p");
let labelStok = document.createElement("div");
// 2. Mengisi konten dan atribut elemen
kartuDiv.className = "kartu-produk"; // Memberi class CSS
gambarProduk.src = produk.gambar;
namaProduk.textContent = produk.nama;
hargaProduk.textContent = produk.harga;
hargaProduk.className = "harga";
// 3. LOGIKA IF/ELSE untuk STOK
if (produk.stok > 0) {
labelStok.textContent = "Tersedia";
labelStok.className = "label-stok tersedia"; // Class CSS hijau
} else {
labelStok.textContent = "Stok Habis";
labelStok.className = "label-stok habis"; // Class CSS merah
}
// 4. Menyusun elemen-elemen menjadi satu kartu utuh
kartuDiv.appendChild(gambarProduk);
kartuDiv.appendChild(namaProduk);
kartuDiv.appendChild(hargaProduk);
kartuDiv.appendChild(labelStok);
// 5. Menambahkan kartu yang sudah jadi ke dalam galeri di HTML
galeriContainer.appendChild(kartuDiv);
}
Tantangan Tambahan (Opsional)
Label Diskon: Tambahkan properti baru pada object produk, misalnya
adaDiskon: trueataufalse. Gunakanifuntuk menampilkan label “DISKON!” jika nilainyatrue.Harga Coret: Jika produk sedang diskon, tampilkan harga asli yang dicoret dan harga diskon di bawahnya. Anda butuh properti
hargaAslidanhargaDiskon.Tombol Beli: Tambahkan tombol “Beli” pada setiap kartu. Gunakan
ifuntuk menonaktifkan tombol (disabled) jika stok produk habis