✦ FRONT END MASTER CLASS 01 / 25
JS
{ }
[ ]
=>
10
Pemrograman Web

BAB 10
JavaScript Intermediate

Naik level dari dasar ke menengah: Array, Object, Method, Scope, Closure, Callback, dan Error Handling — dengan analogi kehidupan nyata.

Kelas X · Semester 1 Lanjutan BAB 9 25 Slide Interaktif

Gunakan tombol ← → atau panah keyboard untuk navigasi

Learning Map

🗺️ Peta Materi

Klik kartu mana saja untuk meloncat langsung ke topiknya.

Jembatan

🔁 Recap BAB 9

Yang sudah kamu kuasai

  • Variabel: let, const, var
  • Tipe data: string, number, boolean
  • Percabangan: if / else
  • Perulangan: for, while
  • Function dasar

Yang akan kita pelajari

  • Menyimpan banyak data: Array Object
  • Mengolah data: map filter reduce
  • Method bawaan: String Math Date
  • Konsep lanjutan: Scope Closure Callback
  • Menangani kesalahan: try / catch
Intinya: di BAB 9 kamu belajar menyimpan satu data. Di BAB 10 kamu belajar menyimpan & mengolah banyak data sekaligus.
Topik 1 · Bagian 1

📦 Array — Kotak Berisi Banyak Data

ANALOGI

Array seperti rak sepatu bernomor. Satu rak, banyak kotak, tiap kotak punya nomor (index) mulai dari 0.

Konsep

Array dibuat dengan kurung siku [ ]. Setiap elemen punya index (posisi) yang dimulai dari 0, bukan 1. .length memberi tahu jumlah isinya.

Contoh Kode
const buah = ['apel', 'jeruk', 'mangga'];
console.log(buah[0]);      // apel  (index 0)
console.log(buah[2]);      // mangga
console.log(buah.length);  // 3

▶ Demo Interaktif

Ingat: index array selalu mulai dari 0. Elemen pertama = arr[0].
Topik 1 · Bagian 2

📦 Array — Menambah & Menghapus

ANALOGI

Antrian kasir. push = orang baru antri di belakang, pop = orang paling belakang keluar. unshift/shift = depan.

Contoh Kode
const antri = ['Budi', 'Sari'];
antri.push('Tono');     // tambah belakang  -> [Budi, Sari, Tono]
antri.pop();            // hapus belakang   -> [Budi, Sari]
antri.unshift('Rina');  // tambah depan     -> [Rina, Budi, Sari]
antri.shift();          // hapus depan      -> [Budi, Sari]
antri.splice(1, 1, 'X');// ganti index 1    -> [Budi, X]

▶ Demo Interaktif

push/pop bekerja di belakang, unshift/shift di depan.
Topik 2 · Bagian 1

🪪 Object — Data Berlabel

ANALOGI

Object seperti KTP: setiap data punya label (key) dan isi (value).

Konsep

Object pakai kurung kurawal { } berisi pasangan key: value. Akses dengan dot (obj.key) atau bracket (obj["key"]).

Contoh Kode
const siswa = {
  nama: 'Budi',
  usia: 15,
  kelas: '10A'
};
console.log(siswa.nama);     // Budi (dot)
console.log(siswa['usia']);  // 15  (bracket)
console.log(Object.keys(siswa)); // [nama,usia,kelas]

▶ Demo Interaktif — Buat profil dirimu

Array akses pakai angka (index). Object akses pakai nama (key).
Topik 2 · Bagian 2

🍽️ Object Lanjutan — Nested & Method

ANALOGI

Menu restoran: ada kategori, di dalamnya ada item, di dalamnya ada harga — object di dalam object (nested).

Konsep

Object bisa berisi object lain (nested) dan bisa berisi function (disebut method). Kata kunci this merujuk ke object itu sendiri.

Contoh Kode
const resto = {
  nama: 'Warung Sahil',
  menu: { makanan: 'Nasi Goreng', harga: 15000 },
  sapa: function() {
    return 'Selamat datang di ' + this.nama;
  }
};
console.log(resto.menu.makanan);  // Nasi Goreng (nested)
console.log(resto.menu.harga);    // 15000
console.log(resto.sapa());        // method + this

▶ Demo Interaktif

Method = function di dalam object. this = "object ini sendiri".
Topik 3 · Bagian 1

⚙️ Array Method — map · filter · forEach

ANALOGI

Mesin conveyor pabrik: map mengubah setiap barang, filter menyaring yang lolos QC, forEach hanya memeriksa satu per satu.

Flowchart: map vs filter vs forEach
[1, 2, 3] map(x => x*2) ubah tiap item [2, 4, 6] filter(x => x>1) saring item [2, 3] forEach(...) lihat saja tidak menghasilkan array
const nilai = [60, 75, 90, 50];
const lulus = nilai.filter(n => n >= 70);  // [75, 90]
const dobel = nilai.map(n => n * 2);        // [120,150,180,100]
nilai.forEach(n => console.log("nilai:", n));

▶ Demo — Filter siswa lulus (≥ 70)

map = array baru hasil ubahan · filter = array baru hasil saringan · forEach = cuma jalan, tanpa hasil.
Topik 3 · Bagian 2

⚖️ Array Method — reduce · find · some

ANALOGI

Timbangan total belanja: reduce menjumlahkan semua koin menjadi satu total akhir.

🪙 + 🪙 + 🪙 = 💰

Konsep

  • reduce — akumulasi semua jadi satu nilai (total)
  • find — cari elemen pertama yang cocok
  • some / every — apakah ada / semua memenuhi?
  • includes — apakah nilai tertentu ada?
const harga = [15000, 8000, 20000];
const total = harga.reduce((acc, h) => acc + h, 0); // 43000
const mahal = harga.find(h => h > 10000);            // 15000
console.log(harga.some(h => h > 19000));  // true
console.log(harga.includes(8000));        // true

▶ Demo — Hitung total belanja

reduce mengubah banyak nilai → satu nilai (cocok untuk total, rata-rata, dll).
Topik 4

✂️ String Method — Mengolah Teks

ANALOGI

Tukang sablon: teks bisa dipotong (slice), disambung, diganti (replace), dirapikan (trim).

Method penting

.toUpperCase().toLowerCase().trim().split().replace().includes().slice()

let nama = '  budi santoso  ';
console.log(nama.trim());            // 'budi santoso'
console.log(nama.trim().toUpperCase()); // 'BUDI SANTOSO'
console.log('halo dunia'.split(' ')); // ['halo','dunia']
console.log('apel'.replace('a','A')); // 'Apel'
console.log('belajar'.slice(0,3));    // 'bel'

▶ Demo — Rapikan & format nama

trim() membuang spasi di tepi · split() memecah string jadi array.
Topik 5

🧮 Math Object — Kalkulator Bawaan

ANALOGI

Kalkulator ilmiah yang selalu siap di meja: membulatkan, mencari acak, terbesar, terkecil.

Math.round()Math.floor()Math.ceil()Math.random()Math.max()Math.min()Math.PI

console.log(Math.round(4.6)); // 5
console.log(Math.floor(4.9)); // 4 (bulat bawah)
console.log(Math.ceil(4.1));  // 5 (bulat atas)
console.log(Math.max(3,9,1)); // 9
console.log(Math.min(3,9,1)); // 1
// angka acak 1..6 (dadu)
console.log(Math.floor(Math.random()*6)+1);

▶ Demo — Hitung diskon toko

floor = bulat ke bawah, ceil = ke atas, round = terdekat.
Topik 6

🕐 Date Object — Waktu & Tanggal

ANALOGI

Jam tangan digital + kalender dinding yang bisa kamu tanya kapan saja.

--:--:--
const now = new Date();
console.log(now.getFullYear()); // tahun, mis 2026
console.log(now.getMonth()+1);  // bulan (0-11, +1 biar manusiawi)
console.log(now.getDate());     // tanggal
console.log(now.getHours());    // jam
console.log(now.getMinutes());  // menit

▶ Demo — Tampilkan waktu sekarang

getMonth() mulai dari 0 (Januari = 0), jadi sering ditambah +1.
Topik 7 · Bagian 1

🏠 Scope — Global vs Local

ANALOGI

Ruangan di rumah: barang di kamar tidur tidak bisa diambil dari dapur. Variabel "lokal" hanya hidup di dalam ruangannya.

Flowchart Scope
🌍 Global Scope 🔧 Function Scope { } Block Scope (let/const) Dalam bisa lihat luar ✓ Luar tidak bisa lihat dalam ✗
let global = 'semua bisa lihat';
function ruang() {
  let lokal = 'hanya di sini';
  console.log(global); // ✓ boleh
  console.log(lokal);  // ✓ boleh
}
ruang();
// console.log(lokal); // ✗ ERROR: tidak terdefinisi
var = function scope · let / const = block scope (lebih aman, dibatasi { }).
Topik 7 · Bagian 2

🔐 Closure — Brankas Rahasia

ANALOGI

Brankas: function dalam "mengingat" variabel function luar, meski function luar sudah selesai — seperti kunci yang tetap bisa membuka brankas.

Konsep

Closure = function yang "membawa" dan mengingat variabel dari tempat ia dibuat. Berguna untuk membuat data privat seperti counter.

function buatCounter() {
  let hitung = 0;            // variabel privat
  return function() {
    hitung++;                // ingat 'hitung'
    return hitung;
  };
}
const counter = buatCounter();
console.log(counter()); // 1
console.log(counter()); // 2  (ingat nilai sebelumnya!)

▶ Demo — Counter dengan closure

Closure = function mengingat variabel induknya. Nilai hitung tetap tersimpan.
Topik 8

📞 Callback & Async

ANALOGI

Pesan pizza via telepon: kamu pesan, lalu lanjut aktivitas lain. Saat pizza siap, kasir menelepon balik (callback).

Flowchart: Synchronous vs Asynchronous
SYNCHRONOUS (urut) A B C ASYNCHRONOUS (callback) A C B (nanti)
function pesanPizza(callback) {
  console.log('Pizza dipesan...');
  setTimeout(() => {
    callback('🍕 Pizza siap!');   // dipanggil nanti
  }, 1500);
}
pesanPizza(pesan => console.log(pesan));
console.log('Sambil nunggu, kerjakan hal lain');

▶ Demo — Simulasi loading data

Callback = function yang dititipkan untuk dijalankan nanti (mis. setelah setTimeout).
Topik 9

🪢 Error Handling — try / catch

ANALOGI

Jaring pengaman pemanjat tebing: try = aksi memanjat, catch = jaring yang menangkap saat jatuh, finally = selalu dirapikan setelahnya.

Flowchart try / catch / finally
try { kode } Ada error? catch(e){ tangani } Ya → Tidak ↓ finally { selalu jalan }
try {
  let hasil = JSON.parse('data rusak'); // memicu error
  console.log(hasil);
} catch (error) {
  console.log('❌ Tertangkap:', error.message);
} finally {
  console.log('✅ Selesai (selalu jalan)');
}
// throw new Error('pesan custom'); // bikin error sendiri

▶ Demo — Validasi pembagian aman

try mencoba, catch menangkap error, finally selalu dijalankan. Program tidak crash!
Ringkasan

📋 Cheat Sheet — Screenshot Ini!

📦 Array

arr[0] · arr.lengthpush / pop / shiftmap · filter · forEachreduce · find · includes

✂️ String

toUpperCase / toLowerCasetrim · slicesplit · replaceincludes

🧮 Math

round · floor · ceilmax · minrandom · PI

🕐 Date

new Date()getFullYear · getMonthgetDate · getHoursgetMinutes

🏠 Scope & Closure

  • let/const = block scope
  • closure = ingat variabel induk

📞 Async & Error

  • callback · setTimeout
  • try / catch / finally
Mini Project · Intro

🛒 Aplikasi Kasir Sederhana

Kita gabungkan SEMUA yang dipelajari menjadi satu aplikasi nyata!

Fitur

  • Daftar produk (Array of Object)
  • Tambah / kurang item ke keranjang
  • Hitung total otomatis (reduce)
  • Hitung kembalian (Math)
  • Cetak struk + waktu (Date)

Konsep yang dipakai

ArrayObjectmap filterreduceMath Datefunction

Lihat 3 slide berikutnya: struktur data → logika → demo penuh.

⭐ Aplikasi nyata = gabungan konsep-konsep kecil. Pelan-pelan, satu langkah demi satu langkah.
Mini Project · Step 1

🧱 Step 1 — Struktur Data Produk

Produk disimpan sebagai Array of Objects — array yang setiap elemennya adalah object produk.

const produk = [
  { id: 1, nama: 'Nasi Goreng', harga: 15000, emoji: '🍳' },
  { id: 2, nama: 'Es Teh Manis', harga: 5000,  emoji: '🍵' },
  { id: 3, nama: 'Ayam Bakar',  harga: 20000, emoji: '🍗' },
  { id: 4, nama: 'Mie Goreng',  harga: 12000, emoji: '🍜' },
  { id: 5, nama: 'Jus Jeruk',   harga: 8000,  emoji: '🍊' }
];
// keranjang awalnya kosong
let keranjang = [];
Array of Object adalah pola paling umum untuk menyimpan daftar data di dunia nyata.
Mini Project · Step 2

⚙️ Step 2 — Logika Keranjang

Function untuk menambah item, mengubah jumlah, dan menghitung total memakai find dan reduce.

function tambah(id) {
  const p = produk.find(x => x.id === id);     // find
  const ada = keranjang.find(x => x.id === id);
  if (ada) ada.qty++;                          // sudah ada → +1
  else keranjang.push({ ...p, qty: 1 });       // baru → push
}
function total() {
  return keranjang.reduce((t, item) =>          // reduce
    t + item.harga * item.qty, 0);
}
function kembalian(bayar) {
  return Math.max(0, bayar - total());          // Math
}
⭐ Perhatikan: find mencari item, push menambah, reduce menjumlah. Semua konsep terpakai!
Mini Project · Demo Penuh

🛒 Kasir Berjalan Penuh

Daftar Menu

🧾 Keranjang

Keranjang masih kosong
Total: Rp0
⭐ Aplikasi ini 100% pakai materi BAB 10. Coba tambah item & cetak struk!
Latihan Mandiri 1 MUDAH

📝 Array & Object Dasar

1. Berapa jumlah elemen array ['a','b','c','d','e']?
2. Dari const buah=['apel','jeruk','mangga'], apa isi buah[2]?
3. Untuk mengakses nama dari const s={nama:'Budi'}, kita tulis s.____ ?
Latihan Mandiri 2 SEDANG

📝 Array & String Method

Tulis kode di editor lalu klik Jalankan. Cocokkan output dengan target.

1. Filter angka genap → target output: [2, 4, 6]
2. Ubah nama jadi UPPERCASE → target: ['APEL','JERUK']
3. Total nilai ulangan dengan reduce
Latihan Mandiri 3 MENANTANG

📝 Error Handling & Callback

1. Buat fungsi pembagian aman dengan try-catch
2. Countdown timer dengan setInterval + callback
Penutup

🎉 Selamat!

Kamu telah menyelesaikan BAB 10 — JavaScript Intermediate.

Yang sudah kamu kuasai

ArrayObjectmap/filter/reduce StringMathDate ScopeClosureCallback Error HandlingMini Project Kasir

🔜 BAB 11 — Teaser

DOM Manipulation & Event: membuat halaman web yang merespons klik, ketikan, dan interaksi pengguna secara langsung!

"Programmer hebat bukan yang tidak pernah error, tapi yang tahu cara menangkapnya." ✦

Front End Master Class · Modul BAB 10 v1.0