本文内容整理于慕课网视频教程
类型转换
数据类型
最新的ECMAScript标准定义了7种数据类型
- 原始类型
Boolean
Null
Undefined
Number
String
Symbol
(ES6中新增) - 对象
Object
类型转换:显式类型转换和隐式类型转换
- 显示类型转换
- Number函数
- 原始类型转换
- 数值:转换后还是原来的值。
- 字符串:如果可以被解析为数值,则转换为相应的数值,否则得到NaN。空字符串转为0。
- 布尔值:true转成1,false转成0。
- undefined:转成NaN。
- null:转成0。
- 对象类型转换
- 先调用对象自身的valueOf方法,如果方法返回原始类型的值(数值、字符串和布尔值),则直接对该值使用Number方法,不再进行后续步骤。
- 如果valueOf方法返回复合类型的值,再调用对象自身的toString方法,如果toString方法返回原始类型的值,则对该值使用Number方法,不再进行后续步骤。
- 如果toString方法返回的是复合类型的值,则报错。
- 原始类型转换
- String函数
- 原始类型转换
- 数值:转为相应的字符串。
- 字符串:还是原来的值
- 布尔值:true转成"true",false转成"false"。
- undefined:转成"undefined"。
- null:转成"null"。
- 对象类型转换
- 先调toString方法,如果toString方法返回原始类型的值,则对该值使用String方法,不再进行后续步骤。
- 如果toString方法返回复合类型的值,再调用valueOf方法,如果valueOf方法返回原始类型的值,则对该值使用String方法,不再进行后续步骤。
- 如果valueOf方法返回的是复合类型的值,则报错。
- 原始类型转换
- Boolean函数
- 原始类型转换
- undefined
- null
- -0 左边这些全都为false,除这些以外的一律为true
- +0
- NaN
- ‘’(空字符串)
- 原始类型转换
- Number函数
- 隐式类型转换(和显式类似,只不过是在后台进行的)
- 四则运算
- 判断语句
- Native调用
常见题目
- []+[] // “”(空字符串)
- []+{} // “[object Object]”
- {}+[] // 0
- {}+{} // Chrome:"[object object] [object object]" Firefox:NaN
- true+true // 2
- 1+{a:1} // “1[object Object]”
typeof
这部分知识在其他地方有整理。变量的类型和计算相关知识部分整理