Setiap nilai di JavaScript punya tipe, yaitu jenisnya: angka (number) seperti 5, teks (string) seperti "5", atau boolean true dan false. Kadang JavaScript diam-diam mengubah tipe sebuah nilai supaya operasinya bisa jalan, misalnya teks jadi angka. Ini namanya type coercion, dan kalau gak paham aturannya, hasilnya bisa bikin kaget.
🧪 Tebakan cepat:
"5" + 3hasilnya8atau"53"? Tebak dulu, jawabannya ada di bagian "Tanda + suka teks".
Tanda + suka teks
console.log("5" + 3); // 53
console.log(5 + 3); // 8
console.log("5" - 3); // 2
console.log(true + true + true); // 3
"5" + 3: kalau salah satu sisi+berupa teks,+jadi penyambung, bukan penjumlah. Angka3diubah jadi teks"3", lalu disambung. Hasilnya teks"53".5 + 3: dua-duanya angka, jadi dijumlah,8."5" - 3: tanda-cuma bisa menghitung, jadi teks"5"diubah jadi angka5. Hasilnya2. Tanda*dan/juga begitu.true + true + true: dalam hitungan,truejadi1danfalsejadi0. Hasilnya3.
Semua itu terjadi otomatis. Kalau kamu mau mengubah tipenya sendiri, pakai Number() atau String(): Number("5") + 3 hasilnya 8, dan String(5) hasilnya "5".
== mengubah tipe, === gak
console.log("5" == 5); // true
console.log("5" === 5); // false
console.log(5 === 5); // true
console.log("lima" == 5); // false
==(loose equality) mengubah tipe dulu, baru membandingkan."5"diubah jadi5, jaditrue.===(strict equality) membandingkan nilai dan tipe tanpa mengubah apa pun. Teks lawan angka langsungfalse."lima"diubah jadi angka gagal (hasilnyaNaN, artinya "bukan angka"), jadi==punfalse.
Kalau a === b hasilnya true, a == b pasti true juga. Kebalikannya belum tentu. Sehari-hari pakai ===, supaya gak ada pengubahan tipe diam-diam.
Truthy dan falsy
console.log(Boolean("kucing")); // true
console.log(Boolean(0)); // false
console.log(Boolean("")); // false
console.log(!!"kucing"); // true
if ("kucing") {
console.log("jalan"); // jalan
}
if butuh true atau false, jadi nilai lain diubah dulu. Nilai yang berubah jadi false disebut falsy. Daftarnya pendek: false, 0, "" (teks kosong), null, undefined, dan NaN (plus -0 dan 0n, bentuk nol yang jarang dipakai). Semua nilai lain truthy, berubah jadi true, termasuk "0", "false", [] dan {}.
Boolean(nilai) mengubah nilai apa pun jadi true atau false sesuai aturan itu. !!nilai hasilnya sama: ! membalik true jadi false, dan !! membalik dua kali.
⚠️ Jebakan yang sering ketemu
- Angka dari form itu teks. Isi
<input>selalu string, jadi"10" + 5jadi"105". Ubah dulu pakaiNumber(). "0"itu truthy. Teks berisi nol tetap teks yang gak kosong, jadiif ("0")tetap jalan.NaN === NaNhasilnyafalse.NaNgak sama dengan apa pun, termasuk dirinya sendiri. Cek pakaiNumber.isNaN(x).
TL;DR: JavaScript kadang mengubah tipe diam-diam (type coercion). + dengan teks menyambung ("5" + 3 jadi "53"), sedangkan -, *, / mengubah teks jadi angka ("5" - 3 jadi 2), dan true dihitung 1. == mengubah tipe dulu, === membandingkan nilai dan tipe apa adanya, jadi pakai ===. Falsy itu false, 0, "", null, undefined, NaN. Sisanya truthy. Boolean(nilai) atau !!nilai mengubah nilai jadi true atau false.