6

如果数字是原始类型,为什么我可以这样做:

> (12345).toString()
"12345"

括号是否将原始类型转换为 a 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 回答