Pertama, fakta:
if (booleanValue)
Akan memenuhi ifpernyataan untuk setiap nilai kebenaran booleanValuetermasuk true, setiap angka tidak nol, nilai string tidak kosong, objek atau array array apa pun, dll ...
Di samping itu:
if (booleanValue === true)
Ini hanya akan memenuhi ifkondisi jika booleanValuesama persis dengan true. Tidak ada nilai kebenaran lain yang akan memuaskannya.
Di sisi lain jika Anda melakukan ini:
if (someVar == true)
Lalu, apa yang akan dilakukan Javascript adalah mengetikkan koersi trueagar sesuai dengan tipe someVardan kemudian membandingkan kedua variabel tersebut. Ada banyak situasi di mana ini kemungkinan tidak sesuai dengan keinginan seseorang. Karena itu, dalam kebanyakan kasus Anda ingin menghindari ==karena ada seperangkat aturan yang cukup panjang tentang bagaimana Javascript akan mengetik memaksa dua hal menjadi jenis yang sama dan kecuali Anda memahami semua aturan itu dan dapat mengantisipasi segala sesuatu yang mungkin dilakukan penerjemah JS ketika diberikan dua jenis berbeda (yang sebagian besar pengembang JS tidak bisa), Anda mungkin ingin menghindari ==seluruhnya.
Sebagai contoh betapa membingungkannya hal itu:
var x;
x = 0;
console.log(x == true); // false, as expected
console.log(x == false); // true as expected
x = 1;
console.log(x == true); // true, as expected
console.log(x == false); // false as expected
x = 2;
console.log(x == true); // false, ??
console.log(x == false); // false
Untuk nilainya 2, Anda akan berpikir bahwa itu 2adalah nilai yang sebenarnya sehingga akan lebih baik dibandingkan true, tetapi itu bukanlah cara kerja paksaan tipe. Ini mengonversi nilai tangan kanan untuk mencocokkan jenis nilai tangan kiri sehingga mengkonversi trueke angka 1sehingga itu membandingkan 2 == 1yang tentu saja bukan yang Anda inginkan.
Jadi, pembeli berhati-hatilah. Kemungkinan besar untuk menghindari ==dalam hampir semua kasus kecuali jika Anda secara eksplisit tahu jenis yang akan Anda bandingkan dan tahu bagaimana semua jenis algoritma pemaksaan bekerja.
Jadi, itu benar-benar tergantung pada nilai-nilai yang diharapkan booleanValuedan bagaimana Anda ingin kode berfungsi. Jika Anda tahu sebelumnya bahwa itu hanya pernah akan memiliki trueatau falsenilai, kemudian membandingkannya secara eksplisit dengan
if (booleanValue === true)
hanya kode tambahan dan tidak perlu dan
if (booleanValue)
lebih kompak dan bisa dibilang lebih bersih / lebih baik.
Sebaliknya, jika Anda tidak tahu apa yang booleanValuemungkin terjadi dan ingin menguji apakah benar-benar diatur truetanpa konversi tipe otomatis lainnya diizinkan, maka
if (booleanValue === true)
bukan hanya ide yang bagus, tetapi juga dibutuhkan.
Misalnya, jika Anda melihat implementasi .on()di jQuery, ia memiliki nilai pengembalian opsional. Jika panggilan balik kembali false, maka jQuery akan secara otomatis menghentikan penyebaran acara. Dalam kasus khusus ini, karena jQuery ingin propagasi berhenti hanya jika falsedikembalikan, mereka memeriksa nilai kembali eksplisit untuk === falsekarena mereka tidak ingin undefinedatau 0atau ""atau apa pun yang akan secara otomatis ketik-convert ke false untuk juga memenuhi perbandingan.
Misalnya, inilah acara jQuery yang menangani kode panggilan balik:
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
Anda dapat melihat bahwa jQuery mencari secara eksplisit ret === false.
Tapi, ada juga banyak tempat lain di kode jQuery di mana pemeriksaan yang lebih sederhana sesuai diberikan keinginan kode. Sebagai contoh:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...