JavaScript memiliki 2 operator untuk membandingkan dua buah nilai, yaitu:
- Strict Equality Operator
===. Operator yang ketat, lurus, tanpa basa-basi. - Lenient (Normal) Equality Operator
==. Lebih sabar, bisa memaafkan kesalahan programer saat membandingkan 2 tipe data yang berbeda.
Perbedaannya adalah yang pertama hanya mempertimbangkan jika 2 buah nilai yang dibandingkan meiliki tipe data yang sama, selain itu maka bernilai false. Sedangkan yang kedua akan memaksakan konversi nilai yang berbeda sebelum membandingkannya seperti pada tipe pertama.
Semua programer JavaScript sepakat untuk hanya menggunakan tipe pertama. Alasannya karena konversi otomatis mungkin menimbulkan hasil yang tidak dikehendaki. Karena sifat pemaafnya ini, kesalahan yang dibuat sang programer akan tersembunyi sampai akhirnya timbul masalah.
Strict Equal ===
Membandingkan 2 buah nilai yang berbeda tipe datanya dengan operator ===, sudah pasti bernilai false. Jika kedua buah nilai memiliki tipe data yang sama, pernyataan-pernyataan di bawah ini akan bernilai true.
undefined === undefinednull === nullx === x+0 === -0false === falseNAN !== NAN
Nilai nol (0) baik positif atau negatif adalah sama nilainya. Untuk NAN, tidak bisa dibandingkan dengan nilai apapun termasuk dengan nilai NAN sendiri. Tipe data string dan number dibandingkan seperti biasa.
Equal ==
Membandingkan 2 buah nilai, jika keduanya memiliki tipe data sama, bandingkan dengan ‘===’. Selain itu:
undefined == nullnumberdibandingkan denganstring, konversistringkenumberbooleandibandingkannon-boolean, konversibooleankenumber, kemudian bandingkan (angka 0 bernilaifalse, 1true)- membandingkan
stringataunumberdenganobject, konversiobjectke tipe data primitif, kemudian bandingkan
Contoh-contoh yang sering dijumpai:
0 == false //true
1 == true //true
2 == true //false
2 ? true : false //true, karena 2 !== 0
"" == 0 //true
"" == false //true
1 == "1" //true
"1" == true //true
"2" == true //false
"true" == true //false
"2" ? true : false //true, karena string tidak kosong
"abc" == new String("abc") //true, tipe object dikonversi ke tipe primitif string
Satu yang agak membingunkan di atas adalah pada pernyataan if atau pada operator ternary, angka lebih besar dari 1 bernilai true, namun bernilai false dalam perbandingan.
Berikut ini adalah beberapa contoh perbandingan dengan ‘==’ yang terkenal membingungkan dan dapat menimbulkan kesalahan.
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
null == undefined // true
false == undefined // false
false == null // false
' \t\r\n ' == 0 // true
Sumber: http://www.2ality.com/2011/06/javascript-equality.html
Leave a Reply to konsalting_ztKn Cancel reply