有人可以詳細解釋這裏發生了什麼嗎?特別是雙點符號。這是什麼JavaScript語法?
(3.14).toFixed(); // "3"
3.14.toFixed(); // "3"
(3).toFixed(); // "3"
3.toFixed(); // SyntaxError: Unexpected token ILLEGAL
3..toFixed(); // "3"
有人可以詳細解釋這裏發生了什麼嗎?特別是雙點符號。這是什麼JavaScript語法?
(3.14).toFixed(); // "3"
3.14.toFixed(); // "3"
(3).toFixed(); // "3"
3.toFixed(); // SyntaxError: Unexpected token ILLEGAL
3..toFixed(); // "3"
據ECMA Script 5.1 Specifications,語法爲十進制文本被定義這樣
DecimalLiteral :: DecimalIntegerLiteral . [DecimalDigits] [ExponentPart] . DecimalDigits [ExponentPart] DecimalIntegerLiteral [ExponentPart]
注:方括號只是爲了表明部分是可選的。
所以,當你說
3.toFixed()
消費3.
後,解析器認爲,當前標記是一個十進制文字的一部分,但它只能跟着DecimalDigits
或ExponentPart
。但它發現t
,這是無效的,這就是爲什麼它與語法錯誤失敗。
當你做
3..toFixed()
消費3.
後,它看到.
被稱爲屬性存取操作。因此,它省略了可選的DecimalDigits
和ExponentPart
並構造了浮點對象並繼續調用toFixed()
方法。克服這種
一種方法是在數字後面留下一個空間,這樣
3 .toFixed()
3.
是一個數字,所以.
是小數點和不啓動的屬性。
3..something
是一個數字後跟一個屬性。