Theo ECMA Script 5.1 Specifications, ngữ pháp cho literals thập phân được định nghĩa như thế này
DecimalLiteral ::
DecimalIntegerLiteral . [DecimalDigits] [ExponentPart]
. DecimalDigits [ExponentPart]
DecimalIntegerLiteral [ExponentPart]
Lưu ý: Dấu ngoặc vuông được chỉ để cho biết rằng những phần là không bắt buộc.
Vì vậy, khi bạn nói
3.toFixed()
Sau khi tiêu thụ 3.
, phân tích cú pháp cho rằng các dấu hiệu hiện nay là một phần của một số thập phân Literal, nhưng nó chỉ có thể được theo sau bởi DecimalDigits
hoặc ExponentPart
. Nhưng nó tìm thấy t
, không hợp lệ, đó là lý do tại sao nó không thành công với SyntaxError.
khi bạn làm
3..toFixed()
Sau khi tiêu thụ 3.
, nó thấy .
được gọi là toán tử accessor tài sản. Vì vậy, nó bỏ qua tùy chọn DecimalDigits
và ExponentPart
và xây dựng một đối tượng dấu chấm động và tiến hành để gọi phương thức toFixed()
.
Một cách để khắc phục điều này là để lại một khoảng trống sau khi số lượng, như thế này
3 .toFixed()