มาดูเงื่อนไขทั้งสองทีละขั้นตอน:
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' == false | true | ทั้งคู่ถูกแปลงเป็น 0 แล้วเปรียบเทียบ |
if(0) | false | 0 เป็น falsy value โดยตรง |
if('0') | true | Non-empty string เป็น truthy |
แนวทางปฏิบัติที่ดี: ใช้ === (strict equality) เพื่อหลีกเลี่ยง type coercion ที่อาจสับสน