ใน JS คุณสามารถส่งคืนบูลีนที่มีคุณสมบัติแบบกำหนดเองได้ เช่น. เมื่อ Modernizr ทดสอบการรองรับวิดีโอจะส่งคืนtrue
หรือfalse
แต่ Boolean ที่ส่งคืน (Bool เป็นออบเจ็กต์ชั้นหนึ่งใน JS) มีคุณสมบัติที่ระบุรูปแบบที่สนับสนุน ตอนแรกมันทำให้ฉันประหลาดใจนิดหน่อย แต่จากนั้นฉันก็เริ่มชอบความคิดและเริ่มสงสัยว่าทำไมมันถึงถูกใช้อย่าง จำกัด
ดูเหมือนว่าเป็นวิธีที่ยอดเยี่ยมในการจัดการกับสถานการณ์ทั้งหมดที่คุณต้องการทราบว่ามีบางสิ่งที่เป็นจริงหรือเท็จ แต่คุณอาจสนใจข้อมูลเพิ่มเติมบางอย่างที่คุณสามารถกำหนดได้โดยไม่ต้องกำหนดวัตถุส่งคืนแบบกำหนดเองหรือใช้ฟังก์ชัน ยอมรับพารามิเตอร์เพิ่มเติม วิธีนี้คุณจะรักษาลายเซ็นฟังก์ชันที่เป็นสากลโดยไม่ลดทอนความสามารถในการส่งคืนข้อมูลที่ซับซ้อน
มีข้อโต้แย้ง 3 ข้อที่ฉันสามารถจินตนาการได้:
- มันค่อนข้างแปลก / คาดไม่ถึงเมื่อมันน่าจะดีกว่าสำหรับอินเทอร์เฟซใด ๆ ที่จะชัดเจนและไม่ยุ่งยาก
- นี่อาจเป็นอาร์กิวเมนต์คนฟาง แต่เป็นกรณีเล็กน้อยฉันสามารถจินตนาการมัน backfires เงียบ ๆ ใน JS optimizer, uglifier, VM หรือหลังจากการเปลี่ยนแปลงข้อกำหนดภาษาเล็กน้อยทำความสะอาด ฯลฯ
- มีวิธีที่ดีกว่ากระชับชัดเจนและเหมือนกันทุกประการ
ดังนั้นคำถามของฉันคือมีเหตุผลใดที่ควรหลีกเลี่ยงการใช้ Booleans ด้วยคุณสมบัติเพิ่มเติมหรือไม่ พวกเขาเป็นกลอุบายหรือการรักษา?
แผนบิดเตือน
ข้างต้นเป็นคำถามเดิมในเกียรติศักดิ์เต็ม ในฐานะที่เป็น Matthew Crumley และ Senevoldsen ทั้งคู่ชี้ว่ามันมีพื้นฐานมาจากหลักฐานเท็จ (เท็จ)? ในประเพณี JS ที่ดีสิ่งที่ Modernizr ทำคือการใช้ภาษาและสิ่งสกปรก มันเดือดลงมาที่ JS ที่มีบูลดั้งเดิมซึ่งหากตั้งค่าเป็นเท็จจะยังคงเป็นเท็จแม้หลังจากพยายามที่จะเพิ่มอุปกรณ์ประกอบฉาก (ซึ่งล้มเหลวอย่างเงียบ ๆ ) และวัตถุบูลีนที่สามารถมีอุปกรณ์ประกอบฉากที่กำหนดเองได้ Modernizr ส่งคืนบูลีน false หรือวัตถุบูลีนจริง
คำถามเดิมของฉันสันนิษฐานว่ากลวิธีทำงานแตกต่างกันและคำตอบที่ได้รับความนิยมมากที่สุดจึงจัดการกับด้านมาตรฐานการเข้ารหัส อย่างไรก็ตามฉันพบว่าคำตอบ debunking เคล็ดลับทั้งหมดที่เป็นประโยชน์มากที่สุด (และข้อโต้แย้งที่ดีที่สุดกับการใช้วิธีการ) ดังนั้นฉันจึงยอมรับหนึ่งในนั้น ขอขอบคุณผู้เข้าร่วมทั้งหมด!
null
ได้หากไม่ได้รับการสนับสนุนและอาร์เรย์ของรูปแบบถ้าเป็นเช่นนั้น รายการถือว่าเป็นความจริงใน JS และnull
เป็นเท็จ