หากเราพิจารณาข้อความแจ้งปัญหาอย่างใกล้ชิด ความแตกต่างระหว่าง ([] ==false) และ ([] || จริง) จะเป็นดังนี้ -
ในกรณีแรก เราใช้การตรวจสอบแบบมีเงื่อนไขแบบหลวมๆ ซึ่งช่วยให้การบีบบังคับแบบพิมพ์เข้าครอบงำได้
ในขณะที่ในกรณีที่สอง เรากำลังประเมิน [] เป็นบูลีนตามลำดับ (จริงหรือเท็จ) ซึ่งใช้ฟังก์ชัน Boolean() แทนการบังคับประเภทภายใต้ตะขอ
ตอนนี้เรามาเปิดเผยคอนเวอร์ชั่นที่เกิดขึ้นเบื้องหลังทั้งสองกรณีกัน
กรณีที่ 1 − ([] ==เท็จ)
ตามเอกสาร MDN หากประเภทข้อมูลสองประเภทบอกว่า x และ y ถูกเปรียบเทียบโดยใช้การดำเนินการที่เท่าเทียมกัน ( ==) ดังนั้น
ค่าบูลีนจะถูกแปลงเป็นตัวเลขโดยใช้ฟังก์ชัน Number() -
เงื่อนไขตอนนี้กลายเป็น −
[] == 0// Number(false) = 0
จากนั้นหากตัวแปรประเภท Object จะถูกแปลงเป็นค่าดั้งเดิม -
"" == 0
และสุดท้ายสตริงว่างจะถูกแปลงเป็นตัวเลข -
0 == 0
ด้านบนจะคืนค่าเป็นจริง
กรณีที่ 2 − ([] || จริง)
ในกรณีนี้ ค่าความจริง/เท็จของ [] จะถูกตรวจสอบโดยแปลงเป็นบูลีนโดยใช้ฟังก์ชันบูลีนในตัว () และ
Boolean([]) = true
ดังนั้นค่าความจริง [] จะยังคงอยู่