.
パーサーは、文字に続く部分が数値の別の部分ではなく、メソッド呼び出しを意味することをどのように認識しますか? 例えば:
10.1 // This is a number with a floating point
10.toMillion() //How does it know that this shouldn't be part of the number?
そのため、数値リテラルでメソッドを呼び出すことはできません。リテラルを括弧 (グループ化演算子) で囲むことにより、ランタイムは含まれている式を評価し、その評価の結果にメソッドを適用します。
.
グループ化演算子は、文字のあいまいさを取り除きます。
アップデート
仕様を検討し、調査した結果、文字の後に続くもの.
が数値の一部であるかプロパティ識別子であるかを判断するために、先読みの使用を許可しない十分な理由があります。
@CygnusX1 がコメントで述べたように、2 つの状況 (.
数字が.
続き、数字以外の文字が続く) は、先読みを使用することで区別できます。識別子は数字で始めることはできないため、 の後に数字が続く場合は数字でなければなりません.
。の後に数字以外の文字が続く場合、数字の.
一部にすることはできません。しかし、それは正しくありません。
数字以外の文字が文字の後に続くが、数字の.
一部である場合が 1 つあります。
console.log(1.e5); // Logs '100000'
は、その後e
に続くのが指数であることを示し、小文字または大文字のいずれかになります。.
このため、先読みを使用する場合は、その後の文字がe
またはE
の場合でも、メソッドまたは数値の一部を表す可能性があることを考慮する必要があります。数値リテラルでのプロパティの使用を禁止する方が簡単です。