Kenal JavaScript: Truthy dan Falsy

Jundi Alwan
Bahasa.ai
Published in
5 min readAug 25, 2017
Komodo. Sumber: Wikimedia.

Kenal JavaScript merupakan salah satu seri tentang JavaScript. Seri ini memperkenalkan hal-hal dasar seputar JavaScript. Setiap minggu akan ada 1–2 artikel baru pada seri ini.

Sebelumnya di ‘Kenal JavaScript’

Operator logika merupakan salah satu operator yang paling sering digunakan di JavaScript. Operator logika biasa dipakai pada statement if..else, switch, dll. Operator logika membantu Anda untuk menentukan blok kode mana yang perlu dijalankan oleh JavaScript sesui dengan kondisi yang dievaluasi.

Sebelumnya, Kenal JavaScript: Operator Logika

Sebelum membahas operator lainnya di JavaScript. Story kali ini akan membahas sebuah topik menarik di JavaScript, yaitu truthy dan falsy. Apa itu Truthy dan falsy? Apakah ada hubungannya dengan nilai boolean truth dan false?

Truthy dan Falsy

Truthy dan falsy merupakan sebuah sebutan bagi nilai non-boolean yang dievaluasi menjadi boolean karena sifat automatic type conversion, atau coersion, dari JavaScript. Nilai truthy merupakan nilai non-boolean yang dievaluasi menjadi nilai true di JavaScript. Sementara nilai falsy merupakan nilai non-boolean yang dievaluasi menjadi nilai false di JavaScript. Jadi Anda bisa anggap bahwa semua nilai pada JavaScript dapat diinterpretasikan kedalam nilai boolean. Nilai truthy atau falsy dari nilai tersebut ditentukan dari beberapa sifat dan spesifikasi.

Bagaimana cara untuk mengevaluasi suatu nilai agar diketahui truthy atau falsy? Biasanya truthy dan falsy digunakan pada if…else statement. Nilai atau variabel hanya perlu dimasukan ke bagian condition. Untuk contoh pada story ini saya akan menggunakan global function Boolean(). Fungsi tersebut akan mengevaluasi nilai yang diberikan sesuai dengan nilai boolean yang sesuai

Boolean(param)

Falsy

Sebuah nilai yang dievaluasi menjadi nilai False oleh JavaScript. Hanya ada enam nilai yang dievaluasi menjadi False, atau bersifat falsy, oleh JavaScript, yaitu:

  • false
  • 0 (nol)
  • “”, string kosong
  • null
  • undefined
  • NaN

Hanya enam nilai tersebut yang dievaluasi menjadi false. Nilai lainnya diatas keenam nilai tersebut akan dievaluasi menjadi nilai true. Selain nilai false yang memang merupakan nilai boolean, nilai lainnya merupakan tipe data non-boolean.

Nilai-nilai yang bersifat falsy.

Truthy

Sebuah nilai yang dievaluasi menjadi nilai true di JavaScript. Ada banyak nilai yang dievaluasi menjadi true, bersifat truthy. Anda hanya perlu memahami keenam nilai yang bersifat falsy. Selebihnya, nilai apapun selain keenam nilai tersebut bersifat truthy.

Dari tipe data number, semua angka non-zero dalam representasi apapun bersifat truthy, termasuk -Infinity dan Infinity. Pengecualian terjadi untuk nilai NaN. Nilai NaN bersifat falsy.

Dari tipe data boolean, tentunya hanya true.

Dari tipe data string, semua string kecuali string kosong bersifat truthy. Termasuk string yang hanya berisi spasi atau string angka nol “0”.

Dari tipe data object, semua object bersifat truthy, termasuk object kosong dan array.

Selain keenam tipe data tersebut, fungsi kosong juga dievaluasi menjadi nilai true oleh JavaScript.

Kegunaan Truthy dan Falsy

Truthy dan falsy memberikan keuntungan, juga kewaspadaan, bagi Anda. Dengan adanya coercion dan truthy falsy Anda bisa melakukan evaluasi kondisi true/false dengan lebih ringkas tanpa perlu menggunakan operator perbandingan. Misalnya salam short-circuit evaluation dan expression if..else.

Truthy dan falsy juga perlu digunakan dengan penuh waspada. Salah satu kekurangan mengandalkan coercion untuk mengeveluasi suatu nilai menjadi truth atau false adalah kode yang tidak terbaca jika expression evaluasi rumit. Dalam kasus ini kode bisa juga membingungkan terutama jika kode berskala besar. Anda perlu melakukan tracing kode terlebih dahulu agar mengetahui apakah nilai tersebut merupakan nilai boolean atau nilai object atau string, dsb. Juga domain nilai dari variabel tersebut untuk mengetahui kemungkinan truthy atau falsy yang terjadi. Hal ini berbeda jika Anda secara eksplisit menggunakan operator perbandingan.

Namun mengevaluasi nilai non-boolean menggunakan operator perbandingan juga beresiko. Perbedaan hasil dari penggunaan strict equality /inequality dan loose equality/inequality perlu sangat diperhatikan.

Untuk loose equality, perlu diperhatikan bahwa:

(1) False, angka nol and string kosong ekuivalen satu sama lain, bernilai true jika saling dibandingkan.

(2) Null hanya ekuivalen dengan null dan undefined. Undefined hanya ekuivalen dengan undefined dan null.

(3) NaN tidak ekuivalen dengan nilai apapun, termasuk nilai NaN lainnya (?!)

(4) Nilai Infinity bersifat truthy namun tidak bisa dibandingkan dengan nilai true atau false, akan menghasilkan false jika dibandingkan dengan nilai true maupun nilai false (?)

(5) Array kosong [] bersifat truthy namun membandingkan [] dengan true akan menghasilkan false dan membandingkan dengan false akan menghasilkan true. (what?!)

Untuk strict equality, hasil dari perbandingan lebih teratur karena tipe data di cek telebih dahulu oleh JavaScript sehingga hanya akan menghasilkan true jika dibandingkan dengan tipe data yang sama. Hanya satu yang perlu diingat, walaupun dengan strict equality nilai NaN dibandingkan dengan nilai NaN lainnya tetap bernilai false *well..

Penggunaan Truthy dan Falsy

Berdasarkan keuntungan dan kewaspadaan yang telah saya jabarkan diatas ada beberapa saran penggunaan untuk memanfaatkan sifat truthy dan falsy.

  1. Gunakan selalu strict equality/inequality operator, jangan gunakan loose equality/inequality karena hasil evaluasi dapat sangat bervariasi dan berpotensi menimbulkan kebingungan dan bug.
  2. Manfatkan dan gunakan selalu sifat truthy dan falsy jika memungkinkan karena mempermudah dan meringkas penulisan kode. Hindari membandingkan nilai truthy atau falsy dengan nilai boolean true atau false, tidak diperlukan.
  3. Manfaatkan sifat truthy dan falsy saat menggunakan ternary operator. Truthy dan falsy akan membantu dalam meringkas evaluasi pada ternary operator agar tidak panjang dalam satu baris.
  4. Konversi dahulu nilai menjadi nilai boolean dengan fungsi Boolean() jika Anda ragu dengan hasil coercion dalam melakukan perbandingan.

--

--

Jundi Alwan
Bahasa.ai

A Polymath. Learn everyday, everywhere. Currently working with amazing team at Bahasa.ai.