JavaScript中的类型有:
- 原始类型:Boolean、Null、String、Number、Symbol、Undefined、BigInt
- 对象: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方法,如果该方法返回原始类型的值,则直接对该值使用String方法,不再进行后续步骤。
如果toString方法返回的是复合类型的值,再调用valueOf方法,如果valueOf方法返回原始类型的值,则对该值使用String方法,不再进行后续步骤。
如果valueOf方法返回的是复合类型的值,则报错。
-
Boolean函数
undefined、null、0、NaN、''(空字符串)转换为false
其他的都为true
二、隐式类型转换
- 以下情况会发生类型转换
四则元素(加减乘除)
判断语句
Native调用(console.log()、alert()等会自动将内容转换为String类型)
[] + [] // ''
[] + {} // '[object Object]'
{} + [] //0
{} + {} //'[object Object][object Object]'
true + true //2
1 + {a: 1} //'1[object Object]'
相关资料:
https://2ality.com/2012/01/object-plus-object.html