Hãy phân tích từng trường hợp:
1. '0' == false → true
Toán tử == thực hiện ép kiểu (type coercion). Quy tắc:
If Type(y) is Boolean, return the result of the comparison x == ToNumber(y)
Vì false là Boolean, JavaScript chuyển false thành số 0. Sau đó so sánh '0' (string) với 0 (number). String '0' cũng bị ép thành number 0. Kết quả: 0 == 0 → true.
Lưu ý: Ép kiểu này bỏ qua bản chất "truthy/falsy" của string '0'.
2. if(0) → false
Đây là kiểm tra truthy/falsy trực tiếp, không có ép kiểu. Trong JavaScript, các giá trị falsy bao gồm: false, 0, -0, 0n, "", null, undefined, NaN. Số 0 là falsy, nên if(0) không thực thi block code.
Tóm tắt:
| Biểu thức | Kết quả | Cơ chế |
|---|---|---|
'0' == false | true | Ép kiểu (coercion) |
if(0) | false | Kiểm tra truthy/falsy trực tiếp |
'0' === false | false | So sánh nghiêm ngặt (strict equality) |
Khuyến nghị: Luôn dùng === (strict equality) để tránh các hành vi ép kiểu khó đoán.