6

数値がプリミティブ型の場合、なぜ私ができるのか:

> (12345).toString()
"12345"

括弧はプリミティブ型を に変換していNumberますか?

4

2 に答える 2

11

いいえ、括弧はパーサーに が.小数点ではないことを理解させているだけです。

12345 .toString()も機能します。

プリミティブ数は、プロパティにアクセスするたびに暗黙的に数値に変換されますが、オブジェクトは一時的なものであり、すぐに失われます。例えば:

var foo = 5;

foo.bar = "something";

console.log(foo.bar); // undefined

文字列とブール値についても同様です。

于 2012-04-19T09:53:55.887 に答える
4

実際、同様に1 .toString()機能します。

>>> typeof(Number(1)) === typeof(1)
true
>>> var a=1; a.toString()
"1"

それはパーサーです: 1.x は x が数字であることを期待しています。

>>> 1.toString()
SyntaxError: identifier starts immediately after numeric literal
[Break On This Error]   

ここでさらに説明を見つけることができます

プリミティブにプロパティがない場合、"abc".length が値を返すのはなぜですか?

JavaScript はプリミティブとオブジェクトの間を容易に強制するからです。この場合、プロパティの長さにアクセスするために、文字列値が文字列オブジェクトに強制されます。文字列オブジェクトはほんの一瞬しか使用されず、その後、ガベージ コレクションの神々に犠牲にされます – しかし、テレビのディスカバリー ショーの精神で、とらえどころのない生き物をトラップし、さらなる分析のために保存します…</p>

于 2012-04-19T09:54:56.973 に答える