Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ทำไมใน JavaScript "if ('0' == false)" จึงเป็น true แต่ "if(0)" ให้ false

มาดูเงื่อนไขทั้งสองทีละขั้นตอน:

1. if('0' == false)

ปฏิบัติตามกฎการเปรียบเทียบแบบ Type Coercion (การแปลงชนิดข้อมูลโดยอัตโนมัติ):

If Type(y) is Boolean, return the result of the comparison x == ToNumber(y)

ตัวดำเนินการ == ทำการแปลงชนิด (type coercion) ดังนี้:

  • ด้านซ้าย '0' (string) ถูกแปลงเป็นตัวเลข 0
  • ด้านขวา false ถูกแปลงเป็นตัวเลข 0
  • เปรียบเทียบ 0 == 0 → true

กรณีนี้ ไม่ได้** ตรวจสอบคุณสมบัติ truthy/falsy ของสตริง '0' เพราะถูกแปลงชนิดก่อนการเปรียบเทียบ

2. if(0)

ตรวจสอบว่าเป็นค่า null หรือ empty string** หรือไม่ ไม่ได้ตรวจสอบว่าเป็นศูนย์หรือไม่

กฎสำคัญ: Non-empty string คือ true เสมอ (แม้จะเป็น "0", "false", " " ก็ตาม)

ไม่มีการแปลงชนิด (no type coercion) เนื่องจากสตริงสามารถประเมินค่า truthy/falsy ได้ด้วยตัวมันเอง

สรุป

นิพจน์ผลลัพธ์เหตุผล
'0' == falsetrueทั้งคู่ถูกแปลงเป็น 0 แล้วเปรียบเทียบ
if(0)false0 เป็น falsy value โดยตรง
if('0')trueNon-empty string เป็น truthy

แนวทางปฏิบัติที่ดี: ใช้ === (strict equality) เพื่อหลีกเลี่ยง type coercion ที่อาจสับสน