终于结束了在象牙塔里的生活,开始苦逼的码农生活了!
开始转战前端,希望自己能够掌握JS。本博客的参考资料为:JavaScript权威指南
Make thing ready
在开始之前,先介绍一张表,如下表所示,是JavaScript类型转换表
值 | 转换为字符串 | 数字 | 布尔值 | 对象 |
---|---|---|---|---|
undefined | “undefined” | NaN | false | throws TypeError |
null | “null” | 0 | false | throws TypeError |
true | “true” | 1 | throws TypeError | |
false | “false” | 0 | throws TypeError | |
“”(空字符串) | 0 | false | new String(“”) | |
“123”(数字) | 123 | true | new String(“123”) | |
“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) | |
{}(任意对象) | 参考下文 | 参考下文 | true | |
[](任意数组) | “” | 0 | true | |
[9](一个数字元素) | “9” | 9 | true | |
[‘a’](其他数组) | 使用join()方法 | NaN | true | |
function(){}(任意函数) | 参考下文 | NaN | true |
对象转换成原始值
JavaScript中的原始值包含undefined、null、布尔值、数字和字符串。而对象除了普通对象,还包含了函数和数组。
原始值就是不可更改的:任何方法都无法更改一个原始值。而原始值的比较是值的比较,只有在它们的值相等时它们才相等。
对象到布尔值的转换
对象到布尔值的转换很简单,所有的对象(包括数组和函数)都转换为true。对于包装对象亦是如此:new Boolean(false)是一个对象,而不是一个原始值,它将被转换成true。
对象到字符串的转换
所有的对象继承了两个转换函数,一个是toString(),一个是valueOf()。第一个函数的作用是返回一个反映这个对象的字符串,第二个函数未明确定义,如果存在任意原始值,将将对象转换为表示它的原始值。由于对象是复合值,而且大多数对象无法真正表示为一个原始值,因此默认的valueOf()方法简单地返回对象本身,而不是返回一个原始值。
JavaScript中对象到字符串的转换经过了如下步骤:
- 如果对象具有toString方法,则调用这个方法。如果它返回一个原始值,就将这个值转换成字符串,并返回这个字符串。具体的转换见上表。
- 如果对象没有toString方法或者该方法并不返回一个原始值,则调用valueOf方法。如果存在valueOf方法,就调用它。如果返回原始值,将这个原始值转换成字符串,并返回。
- 否则,表示没有办法通过这两个方法获得一个原始值,将抛出类型异常。
对象到数字的转换
对象到数字的转换过程中,做了和到字符串的转换一样的事情,但是调用方法的不同。
- 如果对象具有valueOf方法,后者返回一个原始值,则JavaScript将这个原始值转换为数字,并返回这个数字。
- 否则,如果将对象具有toString方法,后者返回一个原始值,则JavaScript将其转换并返回。
- 否则,JavaScript抛出一个类型错误异常。