2

次のように、10 進数リテラルで toFixed() メソッドを呼び出すと、次のようになります。

var a = 67.678.toFixed(2);
console.log(a);

結果はうまくいき、67.68を返します

ただし、整数でメソッドを呼び出すと、エラーが発生します

var b = 67.toFixed(2);
console.log(b); // causes ERROR

これはなぜですか?

注意:

整数を変数に保存すると、 toFixed() メソッドが機能します。

var c = 67;
c = c.toFixed(2);
console.log(c); // returns 67.00

このjsBinを参照してください

ボンネットの下で何が起こっているのですか?

4

3 に答える 3

6

var b = 67.toFixed(2);パーサーは、数値リテラルの後にプロパティアクセサーが続くことを意味していると推測できないため、単純に解析エラーを生成します (エラーは ではなく最初の行にあることに注意してくださいconsole.log(b))

これが機能する理由67.678.toFixed(2)は、他に選択肢がないからです。パーサーは、数値リテラルが「8」桁で終わっていることをあいまいさなく推測でき、次のドットをプロパティアクセサーとして解析し続けることができます (これにより、Number最初にオブジェクトへのボックス化が発生します)。

解決策は明らかに単純です。

(67).toFixed(2);
于 2015-10-14T07:37:32.900 に答える
1

まあその言語関連の構文の問題です。xx.if xxis number と書くと、.演算子の後に表示される次のものは別の数字であると見なされます。ただし、 (xx).toFixed(2) のように括弧で囲むと機能します。後ろで何が起こるかは、括弧が解析を区切った後、または完全な 10 進リテラルが作成されtoFixed、そのオブジェクトで呼び出されるときにオブジェクトです。

それが私たちの質問に答えてくれることを願っています.. :)

于 2015-10-14T07:43:21.260 に答える