İlk olarak, gerçekler:
if (booleanValue)
Tatmin edecek if
herhangi truthy değeri için açıklama booleanValue
dahil true
, herhangi bir sıfır olmayan sayı, herhangi boş olmayan bir dize değeri, herhangi bir nesne veya dizi referans, vb ...
Diğer yandan:
if (booleanValue === true)
Bu sadece if
durumu booleanValue
tam olarak eşitse karşılar true
. Başka hiçbir doğru değer onu tatmin etmeyecektir.
Öte yandan bunu yaparsanız:
if (someVar == true)
Daha sonra, Javascript'in yapacağı şey, türle true
eşleşecek şekilde coerce yazın someVar
ve ardından iki değişkeni karşılaştırmaktır. Muhtemelen bunun niyetinin olmayacağı birçok durum vardır. Bu nedenle, çoğu durumda kaçınmak istersiniz, ==
çünkü Javascript'in aynı tür olmak için iki şeyi nasıl zorlayacağına dair oldukça uzun bir kurallar kümesi vardır ve tüm bu kuralları anlamazsanız ve JS yorumlayıcısının ne zaman yapabileceğini tahmin edemezseniz (çoğu JS geliştiricisinin yapamadığı) iki farklı tür göz önüne alındığında, büyük olasılıkla ==
tamamen kaçınmak istersiniz .
Ne kadar kafa karıştırıcı olabileceğine bir örnek olarak:
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
Değer için 2
, bunun 2
doğru bir değer olduğunu düşünürsünüz, bu yüzden olumlu olarak karşılaştırır true
, ancak tip zorlaması böyle olmaz. Onun dönüştürme böylece sol el değerinin türüne uyacak şekilde sağ değerini dönüştürmektedir true
sayıya 1
o kıyaslıyor yüzden 2 == 1
büyük olasılıkla amaçlanan şey kesinlikle olmadığı.
Yani, alıcı sakının. ==
Açıkça karşılaştıracağınız türleri ve olası tüm zorlama algoritmalarının nasıl çalıştığını bilmediğiniz sürece neredeyse tüm durumlarda kaçınmanız en iyisidir .
Bu, gerçekten beklenen değerlere booleanValue
ve kodun nasıl çalışmasını istediğinize bağlıdır . Önceden bunun yalnızca bir true
veya false
değerine sahip olacağını biliyorsanız, bunu açıkça
if (booleanValue === true)
sadece ekstra kod ve gereksiz ve
if (booleanValue)
daha kompakt ve tartışmasız daha temiz / daha iyidir.
Öte yandan, ne booleanValue
olabileceğini bilmiyorsanız ve true
başka otomatik tür dönüşümü olmadan gerçekten ayarlanıp ayarlanmadığını test etmek istiyorsanız , o zaman
if (booleanValue === true)
sadece iyi bir fikir değil, aynı zamanda gerekli.
Örneğin, .on()
jQuery uygulamasına bakarsanız, isteğe bağlı bir dönüş değeri vardır. Geri arama geri dönerse false
, jQuery olayın yayılmasını otomatik olarak durdurur. Bu özel durumda, jQuery SADECE false
döndürüldüğünde yayılımı durdurmak istediğinden, karşılaştırmayı sağlamak için === false
istemedikleri undefined
veya 0
veya ""
veya otomatik olarak false değerine dönüştürecek başka bir şey için dönüş değeri açıklığını kontrol ederler .
Örneğin, geri arama kodunu işleyen jQuery olayı aşağıdadır:
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
JQuery'nin açıkça aradığını görebilirsiniz ret === false
.
Ancak, jQuery kodunda, kodun isteği göz önüne alındığında daha basit bir kontrolün uygun olduğu birçok yer de vardır. Örneğin:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...