71

重複の可能性:
JavaScript での toString の使用

152..toString(2)

バイナリ文字列「10011000」を正しく作成しますが、

152.toString(2)

例外をスローします

「SyntaxError: 識別子は数値リテラルの直後に始まります」

なんで?後者の構文は実際にはより正確に聞こえますが、前者は非常に奇妙に見えます!

4

3 に答える 3

103

数字の後のA.はあいまいに見えるかもしれません。それは10進数ですか、それともオブジェクトメンバー演算子ですか?

ただし、インタープリターはそれが 10 進数であると判断するため、メンバー演算子がありません。

次のように表示されます。

(10.)toString();  // invalid syntax

2 番目の を含めると.、10 進数の後にメンバー演算子が続きます。

(10.).toString();

@pedants と downvoters

. キャラクターあいまいである。配置に応じて、メンバー演算子または小数として理解できます。あいまいさがなければ、質問する必要はありません。

その特定の位置にある文字の仕様の解釈は.、10 進数になるということです。これは、ECMAScript の数値リテラル構文によって定義されます。

JS インタープリターのあいまいさが仕様によって解決されたからといって、.文字のあいまいさがまったく存在しないわけではありません。

于 2012-10-30T23:55:21.060 に答える
101

レクサー(別名「トークン化」)は、新しいトークンを読み取るときに、最初に数字を見つけたときに、有効な数字の一部ではない文字が見つかるまで、文字(つまり、数字または1つのドット)を消費し続けます。

<152.>は正当なトークンです(末尾の0は必須ではありません)が、必須で<152..>はないため、最初の例は次の一連のトークンになります。

<152.> <.> <toString> <(> <2> <)>

これは合法的な(そして予想される)シーケンスですが、2番目は次のようになります

<152.> <toString> <(> <2> <)>

toStringこれは違法です-番号を通話から分離するピリオドトークンはありません。

于 2012-10-30T23:59:53.040 に答える
0

10.float numbertoString を使用できる anですfloat

例えば。

parseFloat("10").toString() // "10"
于 2012-10-30T23:55:17.943 に答える