ก่อนอื่นข้อเท็จจริง:
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;
}
...