Отказ от ответственности
Ребята, я ДЕЙСТВИТЕЛЬНО знаю о Почему 10..toString() работает, а 10.toString() нет? существование вопроса, но дело в том, что формального объяснения он не дает.
Интерпретация спецификации файла . символ в этой конкретной позиции заключается в том, что это будет десятичная дробь. Это определяется синтаксисом числового литерала ECMAScript.
Без ссылки на стандарт нельзя доверять
Тело вопроса
Я подсознательно понимаю, что
42..toString()
обрабатывается синтаксическим анализатором как число 42.
, за которым следует вызов .toString()
.
Чего я не могу понять, так это почему переводчик не может понять, что
42.toString()
представляет собой 42
, за которым следует вызов метода.
Это просто недостаток современных интерпретаторов JS или это явно указано в ES5.1?
Начиная с ES5.1 определяется Числовой литерал. как (только значительная часть определения):
NumericLiteral ::
DecimalLiteral
HexIntegerLiteral
DecimalLiteral ::
DecimalIntegerLiteral . DecimalDigits(opt) ExponentPart(opt)
. DecimalDigits ExponentPart(opt)
DecimalIntegerLiteral ExponentPart(opt)
Я ожидаю, что последнее правило будет выбрано синтаксическим анализатором.
UPD: чтобы уточнить, этот вопрос ожидает в качестве ответа ссылки на спецификацию ES, в которой прямо указано, что интерпретатор должен вести себя так, как он.
.
вDecimalLiteral
кажется необязательным. - person Derek 朕會功夫   schedule 25.06.2014