Pertama, fakta:
if (booleanValue)
Akan memenuhi if
pernyataan untuk setiap nilai kebenaran booleanValue
termasuk 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 if
kondisi jika booleanValue
sama 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 true
agar sesuai dengan tipe someVar
dan 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 2
adalah 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 true
ke angka 1
sehingga itu membandingkan 2 == 1
yang 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 booleanValue
dan bagaimana Anda ingin kode berfungsi. Jika Anda tahu sebelumnya bahwa itu hanya pernah akan memiliki true
atau false
nilai, 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 booleanValue
mungkin terjadi dan ingin menguji apakah benar-benar diatur true
tanpa 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 false
dikembalikan, mereka memeriksa nilai kembali eksplisit untuk === false
karena mereka tidak ingin undefined
atau 0
atau ""
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;
}
...