- JS中,类型转换只有三种情况,即转换为布尔值、数字、字符串
原始值 | 转换目标 | 结果 |
---|---|---|
number | 布尔值 | 除了0、-0、NaN都为true |
string | 布尔值 | 除了空串都为true |
undefined、null | 布尔值 | false |
引用类型 | 布尔值 | true |
number | 字符串 | 5 => ‘5’ |
Boolean、函数、Symbol | 字符串 | true => ‘true’ |
数组 | 字符串 | [1,2] => ‘1,2’ |
对象 | 字符串 | ‘[object Object]’ |
string | 数字 | ‘1’ => 1, ‘a’ => NaN |
数组 | 数字 | 空数组为0、存在一个元素且为数字转为数字、其他情况NaN |
null | 数字 | 0 |
除了数组的引用类型 | 数字 | NaN |
Symbol | 数字 | 抛错 |
对象转原始类型会调用内置的[toPrimitive]函数,该函数逻辑如下:
- 如果已经原始类型,就不需要转换
- 调用
x.valueOf()
,如果转换为基础类型,就返回转换的值 - 调用
x.toString()
,如果转换为基础类型,就返回转换的值 - 如果没有返回原始类型,就会报错