8

2..toString()が返されるのに、このエラー2がスローされるのはなぜですか?2.toString()

例:

console.log(2..toString()); // prints 2

// Firefox throws the error
// `SyntaxError: identifier starts immediately after numeric literal`
console.log(2.toString());

var x = 2;
console.log(x.toString()); // prints 2

// Firefox throws the error
//`TypeError: XML descendants internal method called on incompatible Number`
console.log(x..toString());
4

5 に答える 5

8

2.は として解析されるため、有効な式である2.02..toString()同等です。2.0.toString()

一方、2.toString()は として解析され2.0toString()ますが、これは構文エラーです。

于 2013-03-17T08:12:17.037 に答える
6

2は単なる数値であり、呼び出すメソッドはありません。

2.オブジェクト(つまり'2.0')である文字列に強制変換できるため、メソッドを持つことができます。

として解析2.toString()されますが2.0tostring()、もちろん意味がありません。

2つがどのように解析されるかを見てみましょう。

ここに画像の説明を入力してください

vs

ここに画像の説明を入力してください

ちなみに、これらを生成するためのツールはここにあります:http: //jsparse.meteor.com/

于 2013-03-17T08:14:05.567 に答える
5
2.toString()

通訳は2「ああ、数だ!」と見て考えます。すると、ドットを見て「ああ、10進数だ!」と思います。そして、次のキャラクターに移動して、を見てt混乱します。「2.t有効な10進数ではありません」と、構文エラーがスローされるためです。


2..toString()

通訳は2「ああ、数だ!」と見て考えます。すると、ドットを見て「ああ、10進数だ!」と思います。次に、別のドットを見て、「ああ、それが私たちの数の終わりだったと思います。今、私たちはこのオブジェクト(数2.0)のプロパティを見ています」と考えます。toString次に、オブジェクトのメソッドを呼び出し2.0ます。

于 2013-03-17T08:18:48.690 に答える
2

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toString

NumberオブジェクトはObjectオブジェクトのtoStringメソッドをオーバーライドするため、最初に明示的にparanthesisを使用して、それがオブジェクトではなく数値であることを示す必要があります。

私の推測では、2.それをfloatとして暗黙的に定義し.toString()ます。これにより、Objectオブジェクトのメソッドではなく、Numberオブジェクトのメソッドを使用できるようになります。

于 2013-03-17T08:15:46.907 に答える
1

2..toString()として解釈され2.0.toString()ます。

実際に2.は、数です:console.log(typeof 2.);与えられます:数

于 2013-03-17T08:15:07.917 に答える