转换方法

toString() toLocalString() 与 valueOf()

每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。

// 也被称作隐式类型转换
var a = 1 + '2' // "12"
null + '' // "null"

不同数据类型下的表现

Null Undefined

因为 toString() 是 Object 对象方法,null 指向空,内存中也没有生成任何对象。

null.toString() // VM29413:1 Uncaught TypeError: Cannot read property 'toString' 
                // of null at <anonymous>:1:6

TIP

但是 nullable(比如 number?) 是可以使用 toString() 的,因为虽然可以是 null ,但实际上此时的 null 是有类型的,只不过值是空。 强制类型转换 String() 兼容 Null 和 Undefined ,其余的转换结果是相同的。

undefined 和 null 原理是一样的。

String

字符串在使用 toString() 没有任何问题,因为返回的就是它本身的值。

Number

1.toString() // Uncaught SyntaxError: Invalid or unexpected token
1 .toString() // "1"
1..toString() // "1"
(1).toString() // "1"

对于 1 来说,javascript 引擎无法判断这里的 . 是 float 型的 . 还是对象的操作符 . 。1 (空格)和 () 运算符效果相似,他们都会 返回表达式的值,然后会被包装成为 Number 类,Number 类重写了 Object 的 toString 方法。对于 1.. , javascript 的 float 类型允许存在 1. 这种写法,这样就可以判断出第二个 . 一定是对象的操作符 .

Boolean

true.toString() // tue

javascript 引擎可以直接识别出 truefalse,并转换为包装类型 Boolean,Boolean 类重写了 Object 的 toString 方法。

Object