2014-10-18 151 views
5

有人可以詳細解釋這裏發生了什麼嗎?特別是雙點符號。這是什麼JavaScript語法?

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

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

source

回答

9

ECMA Script 5.1 Specifications,語法爲十進制文本被定義這樣

DecimalLiteral :: 

    DecimalIntegerLiteral . [DecimalDigits] [ExponentPart] 

    . DecimalDigits [ExponentPart] 

    DecimalIntegerLiteral [ExponentPart] 

注:方括號只是爲了表明部分是可選的。

所以,當你說

3.toFixed() 

消費3.後,解析器認爲,當前標記是一個十進制文字的一部分,但它只能跟着DecimalDigitsExponentPart。但它發現t,這是無效的,這就是爲什麼它與語法錯誤失敗。

當你做

3..toFixed() 

消費3.後,它看到.被稱爲屬性存取操作。因此,它省略了可選的DecimalDigitsExponentPart並構造了浮點對象並繼續調用toFixed()方法。克服這種

一種方法是在數字後面留下一個空間,這樣

3 .toFixed() 
8

3.是一個數字,所以.是小數點和不啓動的屬性。

3..something是一個數字後跟一個屬性。