Đó là theo thông số kỹ thuật.
12.5 Câu lệnh if
.....
2. Nếu ToBoolean (GetValue (exprRef)) là đúng, thì
a. Trả về kết quả đánh giá Tuyên bố đầu tiên.
3. Khác,
....
ToBoolean, theo thông số kỹ thuật, là
Hoạt động trừu tượng ToBoolean chuyển đổi đối số của nó thành giá trị của kiểu Boolean theo Bảng 11:
Và bảng đó nói điều này về chuỗi:
Kết quả là sai nếu đối số là Chuỗi rỗng (độ dài của nó bằng 0); nếu không thì kết quả là đúng
Bây giờ, để giải thích lý do tại sao "0" == false
bạn nên đọc toán tử đẳng thức, trong đó nói rằng nó nhận giá trị của nó từ phép toán trừu tượng GetValue(lref)
khớp với bên phải.
Mô tả phần có liên quan này là:
nếu IsPropertyReference (V), thì
a. Nếu HasPrimitiveBase (V) là sai, thì hãy lấy phương thức bên trong [[Get]] của cơ sở, nếu không thì hãy lấy
là phương thức nội bộ [[Get]] đặc biệt được xác định bên dưới.
b. Trả về kết quả của việc gọi phương thức get bằng cách sử dụng cơ sở làm giá trị này và truyền
GetReferencedName (V) cho đối số
Hay nói cách khác, một chuỗi có một cơ sở nguyên thủy, gọi lại phương thức get nội bộ và kết thúc là false.
Nếu bạn muốn đánh giá mọi thứ bằng cách sử dụng thao tác GetValue ==
, nếu bạn muốn đánh giá bằng cách sử dụng ToBoolean
, hãy sử dụng ===
(còn được gọi là toán tử đẳng thức "nghiêm ngặt")
"0"
là một chuỗi và vì nó không trống nên nó được đánh giá là đúng.