JavaScript括号将原始类型转换为对象

时间:2012-04-19 09:49:51

标签: javascript

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

> (12345).toString()
"12345"

括号是否将基元类型转换为Number

2 个答案:

答案 0 :(得分:10)

不,括号只是让解析器理解.不是小数点。

12345 .toString()也可以。

当您访问其属性时,原始数字会隐式转换为Numbers,但这些对象是临时的并且会立即丢失。例如:

var foo = 5;

foo.bar = "something";

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

同样适用于字符串和布尔值。

答案 1 :(得分: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]   

您可以找到进一步的解释here

  

如果原语没有属性,为什么“abc”.length返回a   值?

     

因为JavaScript很容易在基元和对象之间强制转换。在这种情况下,字符串值被强制转换为字符串对象   为了访问属性长度。仅使用字符串对象   在几分之一秒之后,它被牺牲给了众神   垃圾收集 - 但在电视发现的精神显示,我们   将捕获难以捉摸的生物并将其保存以供进一步分析......