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 | toString() |
对象转字符串
具体步骤如下:
- 如果有toString()方法,调用对象的toString()方法,如果返回一个字面量就把这个字面量转换成字符串并返回。字面量转字符串见上表。
- 如果没有toString()方法或者没有返回字面量,并且有valueOf()方法,调用valueOf()方法。如果这个方法返回字面量就转换成字符串返回。
- 如果以上两步都没有成功,就抛出一个类型错误异常。
对象转数字
其实就是把对象转字符串的前两步调换一下,然后把返回结果都转成数字。
具体步骤如下:
- 如果有velueOf()方法,调用valueOf()方法。如果这个方法返回字面量就转换成数字返回。
- 如果没有valueOf()方法或者没有返回字面量,并且有toString()方法,调用对象的toString()方法,如果返回一个字面量就把这个字面量转换成数字并返回。字面量转数字见上表。
- 如果以上两步都没有成功,就抛出一个类型错误异常。
对象转字面量
有些特殊的运算符并不会把对象转换成数字或者字符串,而是转换成字面量。
对象转字面量的具体步骤和对象转数字的具体步骤一样,先调用valueOf()再调用toString(),区别是,对象转字面量并不会在返回之前把结果转换成字符串或者数字,也就是说没有上面步骤中的粗体部分。