DataLens

Template literal dan pengolahan string

Bangun string dengan template literal, bersihkan dan periksa teks dengan trim, huruf besar-kecil, includes, startsWith, slice, split, join, replaceAll, dan padStart, serta format angka untuk pengguna Indonesia.

Level: Menengah · 8 menit baca

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

Idenya

Begitu banyak bagian aplikasi web berupa teks: nama produk, harga dengan pemisah ribuan, pesan yang dibangun dari data, kata pencarian yang diketik dengan spasi nyasar dan huruf kapital. String JavaScript dilengkapi kotak perkakas berisi method untuk tugas-tugas persis seperti ini, dan template literal membuat pembangunan teks dari data mudah dibaca.

Template literal

Halaman keranjang butuh baris seperti "Total for 2 × Arabica Gayo: Rp 190.000", yang dibangun dari jumlah, nama, dan total yang dihitung. Cara lama merekatkannya dengan +, yang cepat jadi berantakan. Bandingkan dengan template literal, yang memungkinkanmu menulis kalimatnya lalu menyisipkan nilainya langsung ke dalamnya:

const name = "Arabica Gayo";
const price = 95000;
const qty = 2;

console.log("Total for " + qty + " × " + name + ": Rp " + (price * qty).toLocaleString("id-ID"));
console.log(`Total for ${qty} × ${name}: Rp ${(price * qty).toLocaleString("id-ID")}`);
console.log(`${qty > 1 ? "items" : "item"} in your cart`);
Total for 2 × Arabica Gayo: Rp 190.000
Total for 2 × Arabica Gayo: Rp 190.000
items in your cart

Output-nya sama, tetapi template literal terbaca seperti kalimat yang dihasilkannya. Gunakan setiap kali kamu menggabungkan teks dengan nilai. (Saat menyisipkan data pengguna ke HTML, ingat modul 5: bangun elemen dengan textContent saja.)

Membersihkan dan membandingkan

Saat seseorang mengetik " Arabica GAYO " di kotak pencarian, maksudnya sama dengan "arabica gayo". Tapi bagi JavaScript keduanya string yang sama sekali berbeda, dan pencarian yang langsung membandingkannya tidak menemukan apa pun. Membersihkan input sebelum membandingkan menyelesaikan sebagian besar masalah ini:

const typed = "   Arabica GAYO  ";
console.log(`[${typed.trim()}]`);
console.log(typed.trim().toLowerCase());
console.log(typed.toLowerCase().includes("gayo"));
console.log("NG-0018".startsWith("NG-"), "photo.JPG".toLowerCase().endsWith(".jpg"));
console.log("kopi" === "Kopi", "kopi" === "Kopi".toLowerCase());
[Arabica GAYO]
arabica gayo
true
true true
false true

String dibandingkan persis, karakter demi karakter, jadi normalkan input pengguna lebih dulu: trim() membuang spasi di sekelilingnya, toLowerCase() membuat perbandingan tidak peka huruf besar-kecil. Dua panggilan ini mencegah sebagian besar bug "pencariannya tidak menemukan apa-apa".

String bersifat immutable: setiap method mengembalikan string baru dan membiarkan yang asli tidak berubah. typed.trim() tidak mengubah typed; kamu harus memakai atau menyimpan hasilnya.

Membongkar string

Kode produk seperti NG-0018-BLK memadatkan beberapa fakta dalam satu string: merek, nomor, dan warnanya. Dan daftar tag yang diketik manusia, seperti "arabica, aceh , single origin", perlu dijadikan tag-tag terpisah. Method-method ini memotong string menjadi potongan-potongan dan menyatukan potongan kembali:

const sku = "NG-0018-BLK";
console.log(sku.length, sku[0], sku.at(-1));
console.log(sku.slice(3, 7), sku.slice(-3));
console.log(sku.indexOf("-"), sku.split("-"));

const tags = "arabica, aceh , single origin";
console.log(tags.split(",").map((t) => t.trim()));
console.log(["Gayo", "Toraja", "Kintamani"].join(" · "));
11 N K
0018 BLK
2 ["NG", "0018", "BLK"]
["arabica", "aceh", "single origin"]
Gayo · Toraja · Kintamani

Mengganti dan menambahkan padding

Harga sering datang sebagai teks seperti "Rp 1.250.000", yang tidak bisa dihitung sampai "Rp" dan titik-titiknya dibuang. Dan nomor pesanan sering butuh lebar tetap, seperti 0007 alih-alih 7. Method-method ini menangani kedua pekerjaan itu:

console.log("Rp 1.250.000".replaceAll(".", "").replace("Rp ", ""));
console.log(Number("Rp 1.250.000".replace(/[^\d]/g, "")));
console.log(String(7).padStart(4, "0"), "Total".padEnd(10, ".") + "Rp 95.000");
console.log("ha".repeat(3));
1250000
1250000
0007 Total.....Rp 95.000
hahaha

Memformat angka untuk manusia

Masalah sebaliknya: kamu punya angka seperti 1250000.5 dan perlu menampilkannya ke pelanggan Indonesia sebagai "1.250.000,5" atau "Rp 95.000". JavaScript punya format bawaan yang tahu konvensi setiap negara, jadi kamu tidak perlu menambahkan titiknya sendiri:

const amount = 1250000.5;
console.log(amount.toLocaleString("id-ID"));
console.log(amount.toLocaleString("en-US"));
console.log(Math.round(amount).toLocaleString("id-ID"));
console.log((0.1234).toFixed(2), (12.5).toFixed(0));

const rupiah = new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", maximumFractionDigits: 0 });
console.log(rupiah.format(95000).replace(/\s/, " "));
1.250.000,5
1,250,000.5
1.250.001
0.12 13
Rp 95.000
Ide utama

Bangun teks dengan template literal ( `${value}` ); normalkan input dengan trim() dan toLowerCase() sebelum membandingkan; gunakan includes, startsWith, slice, split/join dan replaceAll untuk memeriksa dan membentuk ulang; format angka dengan toLocaleString("id-ID") atau Intl.NumberFormat.

Mengapa ini penting untuk kode yang bersih

Taruh pemformatan di satu tempat: helper formatRupiah(amount) yang dipakai di mana-mana, alih-alih "Rp " + x.toLocaleString(...) yang tersebar di seluruh codebase. Saat format-nya berubah (menambah desimal, locale lain untuk halaman berbahasa Inggris), kamu mengubah satu function. Hal yang sama berlaku untuk menormalkan kata pencarian: satu function normalise(text), dipakai oleh setiap perbandingan.

Rangkuman

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

Berikutnya: Method array (map, filter, reduce, forEach) →