Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ถ้า ([] ==false) เป็นจริง เหตุใด ([] || จริง) จึงส่งผลให้ [] - JavaScript


หากเราพิจารณาข้อความแจ้งปัญหาอย่างใกล้ชิด ความแตกต่างระหว่าง ([] ==false) และ ([] || จริง) จะเป็นดังนี้ -

ในกรณีแรก เราใช้การตรวจสอบแบบมีเงื่อนไขแบบหลวมๆ ซึ่งช่วยให้การบีบบังคับแบบพิมพ์เข้าครอบงำได้

ในขณะที่ในกรณีที่สอง เรากำลังประเมิน [] เป็นบูลีนตามลำดับ (จริงหรือเท็จ) ซึ่งใช้ฟังก์ชัน Boolean() แทนการบังคับประเภทภายใต้ตะขอ

ตอนนี้เรามาเปิดเผยคอนเวอร์ชั่นที่เกิดขึ้นเบื้องหลังทั้งสองกรณีกัน

กรณีที่ 1 − ([] ==เท็จ)

ตามเอกสาร MDN หากประเภทข้อมูลสองประเภทบอกว่า x และ y ถูกเปรียบเทียบโดยใช้การดำเนินการที่เท่าเทียมกัน ( ==) ดังนั้น

ค่าบูลีนจะถูกแปลงเป็นตัวเลขโดยใช้ฟังก์ชัน Number() -

เงื่อนไขตอนนี้กลายเป็น −

[] == 0// Number(false) = 0

จากนั้นหากตัวแปรประเภท Object จะถูกแปลงเป็นค่าดั้งเดิม -

"" == 0

และสุดท้ายสตริงว่างจะถูกแปลงเป็นตัวเลข -

0 == 0

ด้านบนจะคืนค่าเป็นจริง

กรณีที่ 2 − ([] || จริง)

ในกรณีนี้ ค่าความจริง/เท็จของ [] จะถูกตรวจสอบโดยแปลงเป็นบูลีนโดยใช้ฟังก์ชันบูลีนในตัว () และ

Boolean([]) = true

ดังนั้นค่าความจริง [] จะยังคงอยู่