がどのようにパーサは.
文字以下の部分はメソッド呼び出しの代わりに、多数の別の部分を意味することを意図していることを知っているだろうか?例:
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?
このため、数値リテラルのメソッドを呼び出すことはできません。リテラルをカッコで囲んで(grouping operator)、ランタイムは含まれている式を評価し、その評価の結果にメソッドを適用します。
グループ化演算子は、.
文字のあいまいさを削除します。
更新
いくつかの考えやスペックを通していくつかの調査に続き、先読みの使用は何.
文字の後に続くことは番号の一部であるかどうかを判断することはできませ正当な理由がありますまたはプロパティ識別子。
@ CygnusX1がコメントに記載されているように、2つの状況(.
の後ろに数字と.
のあとに数字以外の文字が続きます)は先読みの使用によって区別できます。識別子は数字で始めることができないので、数字が.
に続く場合は数字でなければなりません。数値以外の文字が.
の後に続く場合は、数値の一部にすることはできません。しかしそれは全く正しいことではありません。
非数値文字が.
文字をたどるが、それでも数の一部とすることができたもので、状況があります:
console.log(1.e5); // Logs '100000'
e
は次にくるものが指数であることを示し、それができます小文字でも大文字でもかまいません。このため、先読みを使用すると、.
に続く文字がe
またはE
である場合でも、メソッドまたは数値の一部を表す可能性があることを考慮する必要があります。数値リテラルのプロパティの使用を禁止するほうが簡単です。
なぜ「Number.isNaN」をチェックしていますか? 'this.isNaN()'を意味しますか? – David
以下の答えに加えて、 '987654321..toMillion()' – Izkata
@Davidをチェックしてください。 'isNaN(this)'(これはグローバル関数であり、 'Number.prototype'のプロパティではありません)です。 –