尽管JavaScript可以自动做许多类型转换,但有时仍需要做显式转换,或者为了使代码变得清晰易读而做显式转换。
做显式类型转换最简单的方法就是使用Boolean()、Number()、String()或Object()函数。当不通过new运算符调用这些函数时,他们会作为类型转换函数并按照下表所描述的规则做类型转换:
值 | 转换为字符串 | 转换为数字 | 转换为布尔值 | 转换为对象 |
---|---|---|---|---|
undefined | “undefined” | NaN | false | throws TypeError |
null | “null” | 0 | false | throws TypeError |
true | “true” | 1 | new Boolean(true) | |
false | “false” | 0 | new Boolean(false) | |
“”(空字符串) | 0 | false | new String("") | |
“1.2”(非空,数字) | 1.2 | true | new String(“1.2”) | |
“one”(非空,非数字) | NaN | true | new String(“one”) | |
0 | “0” | false | new Number(0) | |
-0 | “0” | false | new Number(-0) | |
NaN | “NaN” | false | new Number(NaN) | |
Infinity | “Infinity” | true | new Number(Infinity) | |
-Infinity | “-Infinity” | true | new Number(-Infinity) | |
1(无穷大,非零) | “1” | true | new Number(1) | |
{}任意对象 | 参考《JavaScript权威指南》“对象转换为原始值”章节 | 参考《JavaScript权威指南》“对象转换为原始值”章节 | true | |
[](任意数组) | “” | 0 | true | |
[9](1个数字元素) | “9” | 9 | true | |
[‘a’](其他数组) | 使用join()方法 | NaN | true | |
function(){}(任意函数) | 参考《JavaScript权威指南》“对象转换为原始值”章节 | NaN | true |
Number("3") // => 3
String(false) // => "false" 或使用false.toString()
Boolean([]) // => true
Object(3) // => new Number(3)
需要注意的是,除了null和undefined之外的任何值都具有toString()方法,这个方法的执行结果通常和String()方法的返回结果一致。同样需要注意的是,如果试图把null或undefined转换为对象,则会向上面表格所描述的那样抛出一个类型错误(TypeError)。Object()函数在这种情况下不会抛出异常:它仅简单地返回一个新创建的空对象。