JavaScript中的各种类型转换

转数字 转字符串 转布尔值
undefined NaN “undefined” false
null 0 “null” false
true 1 “true”
false 0 “false”
0 “0” false
-0 “0” false
NaN “NaN” false
Infinity “Infinity” true
-Infinity “-Infinity” true
1(非零) “1” true
{ }(任意对象) 0 “” true
[ ].(任意数组) 0 “” true
[9].(包含一个数字元素) 9 “9” true
[“a”].(其他数组) NaN 使用.join()方法 true
function(){}(任意函数) NaN 见下文 true

两个基本的转换方法:

1
2
toString()
valueOf()

对象转字符串
具体步骤如下:

  • 如果有toString()方法,调用对象的toString()方法,如果返回一个字面量就把这个字面量转换成字符串并返回。字面量转字符串见上表。
  • 如果没有toString()方法或者没有返回字面量,并且有valueOf()方法,调用valueOf()方法。如果这个方法返回字面量就转换成字符串返回。
  • 如果以上两步都没有成功,就抛出一个类型错误异常。

对象转数字
其实就是把对象转字符串的前两步调换一下,然后把返回结果都转成数字。
具体步骤如下:

  • 如果有velueOf()方法,调用valueOf()方法。如果这个方法返回字面量就转换成数字返回。
  • 如果没有valueOf()方法或者没有返回字面量,并且有toString()方法,调用对象的toString()方法,如果返回一个字面量就把这个字面量转换成数字并返回。字面量转数字见上表。
  • 如果以上两步都没有成功,就抛出一个类型错误异常。

对象转字面量
有些特殊的运算符并不会把对象转换成数字或者字符串,而是转换成字面量。
对象转字面量的具体步骤和对象转数字的具体步骤一样,先调用valueOf()再调用toString(),区别是,对象转字面量并不会在返回之前把结果转换成字符串或者数字,也就是说没有上面步骤中的粗体部分。