ก่อนอื่นข้อเท็จจริง:
if (booleanValue)
จะตอบสนองif
คำสั่งสำหรับค่าความจริงใด ๆ ของการbooleanValue
รวมถึงtrue
จำนวนที่ไม่เป็นศูนย์ใด ๆ ค่าสตริงที่ไม่ว่างใด ๆ การอ้างอิงวัตถุหรืออาร์เรย์ ฯลฯ ...
ในทางกลับกัน:
if (booleanValue === true)
นี้จะตอบสนองif
เงื่อนไขถ้าเป็นเท่ากับbooleanValue
true
ไม่มีค่าความจริงอื่น ๆ จะพึงพอใจ
ในทางกลับกันถ้าคุณทำสิ่งนี้:
if (someVar == true)
จากนั้นสิ่งที่ Javascript จะทำคือ type coerce true
เพื่อให้ตรงกับชนิดของsomeVar
แล้วเปรียบเทียบตัวแปรสองตัว มีหลายสถานการณ์ที่สิ่งนี้ไม่น่าเป็นไปได้ ด้วยเหตุนี้ในกรณีส่วนใหญ่คุณต้องการหลีกเลี่ยง==
เนื่องจากมีกฎที่ค่อนข้างยาวเกี่ยวกับวิธีที่ Javascript จะพิมพ์บีบบังคับให้สองสิ่งเป็นประเภทเดียวกันและเว้นแต่คุณจะเข้าใจกฎเหล่านั้นทั้งหมดและสามารถคาดการณ์ได้ทุกอย่างที่ล่าม JS อาจทำได้เมื่อ มีสองประเภทแตกต่างกัน (ซึ่งนักพัฒนา JS ส่วนใหญ่ไม่สามารถทำได้) คุณอาจต้องการหลีกเลี่ยง==
โดยสิ้นเชิง
เป็นตัวอย่างของความสับสนว่า:
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
สำหรับค่า2
คุณจะคิดว่า2
เป็นค่าความจริงดังนั้นมันจะเปรียบเทียบได้ดีtrue
แต่นั่นไม่ใช่วิธีการบีบบังคับประเภท มันกำลังแปลงค่ามือขวาให้ตรงกับประเภทของค่ามือซ้ายดังนั้นมันจึงแปลงtrue
เป็นตัวเลข1
ดังนั้นมันจึงเป็นการเปรียบเทียบ2 == 1
ซึ่งไม่ใช่สิ่งที่คุณต้องการ
ดังนั้นผู้ซื้อระวัง เป็นไปได้ว่าจะดีที่สุดที่จะหลีกเลี่ยง==
ในเกือบทุกกรณียกเว้นว่าคุณทราบชนิดที่คุณจะเปรียบเทียบอย่างชัดเจนและรู้ว่าการบังคับประเภทอัลกอริทึมที่เป็นไปได้ทั้งหมดทำงานอย่างไร
ดังนั้นจึงขึ้นอยู่กับค่าที่คาดหวังbooleanValue
และวิธีที่คุณต้องการให้โค้ดทำงาน หากคุณรู้ล่วงหน้าว่ามันจะมีค่าtrue
หรือfalse
ค่าเพียงอย่างเดียวให้เปรียบเทียบด้วย
if (booleanValue === true)
เป็นรหัสพิเศษและไม่จำเป็นและ
if (booleanValue)
มีขนาดกะทัดรัดและทำความสะอาดได้ดีกว่า
หากในอีกทางหนึ่งคุณไม่ทราบว่าbooleanValue
อาจเป็นอะไรและคุณต้องการทดสอบว่ามีการตั้งค่าอย่างแท้จริงtrue
โดยไม่อนุญาตให้มีการแปลงประเภทอัตโนมัติอื่น ๆ หรือไม่
if (booleanValue === true)
ไม่ใช่แค่ความคิดที่ดี แต่จำเป็น
ตัวอย่างเช่นหากคุณดูการใช้งาน.on()
ใน jQuery จะมีค่าส่งคืนทางเลือก หากการเรียกกลับส่งผลfalse
ให้ jQuery จะหยุดการเผยแพร่กิจกรรมโดยอัตโนมัติ ในกรณีนี้โดยเฉพาะตั้งแต่ jQuery ต้องการที่จะขยายพันธุ์หยุดเท่านั้นถ้าfalse
ถูกส่งกลับพวกเขาตรวจสอบอย่างชัดเจนค่าตอบแทนสำหรับการ=== false
เพราะพวกเขาไม่ได้ต้องการundefined
หรือ0
หรือ""
หรือสิ่งอื่นที่จะพิมพ์แปลงโดยอัตโนมัติเพื่อเท็จยังตอบสนองการเปรียบเทียบ
ตัวอย่างเช่นต่อไปนี้คือ jQuery event handling code callback:
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
คุณจะเห็นว่า jQuery ret === false
อย่างชัดเจนมองหา
แต่ยังมีสถานที่อื่น ๆ อีกมากมายในรหัส jQuery ที่การตรวจสอบที่ง่ายกว่านั้นเหมาะสมตามความต้องการของรหัส ตัวอย่างเช่น:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...