2014-10-18 17 views
5

Ai đó có thể giải thích chi tiết những gì đang xảy ra ở đây? Cụ thể là ký hiệu chấm kép.Cú pháp javascript này là gì?

(3.14).toFixed(); // "3" 
3.14.toFixed(); // "3" 

(3).toFixed(); // "3" 
3.toFixed(); // SyntaxError: Unexpected token ILLEGAL 
3..toFixed(); // "3"  

source

Trả lời

9

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 DecimalDigitsExponentPart 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() 
8

3. là một con số, do đó . là dấu thập phân và không bắt đầu một tài sản.

3..something là số được theo sau là thuộc tính.

Các vấn đề liên quan