Type Coercion — JavaScript

Coba prediksi: "5" == 5 itu hasilnya true atau false di JavaScript? Jawaban: true. Loh, kan tipenya beda? Itu karena JavaScript diam-diam ngubah string "5"…

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" + 3 hasilnya 8 atau "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

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

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

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.

Yang akan kamu pelajari