在js中总共有三种自动类型转换
1.转boolean类型
原始值 | 结果 |
number | 除了0,-0,NaN都是true |
string | 除了空串都为true |
undefined,null | false |
引用类型 | true |
2.转string类型
初始类型 | 结果 |
number | ‘5‘->5 |
Boolean,函数,symbol | true |
数组 | [1,2]->'1,2' |
对象 | [object object] |
3.转number类型
源类型 | 结果 |
string | 纯数字字符串为数字,字符串为NaN |
数组 | 空数组为0,存在一个元素且为数字转数字。其他情况NaN |
null | 0 |
除去数组的引用类型 | NaN |
Symbol | 报错 |
对象转换为原始类型会调用内置的[[ToPrimitive]]函数
整个算法逻辑为:
- 如果已经是原始类型了,那就不需要转换了
- 调用
x.valueOf()
,如果转换为基础类型,就返回转换的值 - 调用
x.toString()
,如果转换为基础类型,就返回转换的值 - 如果都没有返回原始类型,就会报错