一、强制/显式类型转换
主要有number、string、boolean三种
1. Number
可以将任意类型数据转为number,主要分为简单数据类型、引用数据类型两种
a. 简单数据类型
null ➡️ 0,undefined ➡️ NaN,'' ➡️ 0,123abc ➡️ NaN,number ➡️ number, 非空字符串 ➡️ NaN
b. 引用数据类型
Object、Array:先调用valueOf()方法,如果返回简单数据类型,则可,否则再调用toString()方法,如果得到简单数据类型即可,否则报错。
Date:与Object、Array正好相反;。
[] ➡️ '' ➡️ 0
2. String
可以将任意类型数据转为string,主要分为简单数据类型、引用数据类型两种
a. 简单数据类型
null ➡️ 'null',undefined ➡️ 'undefined',true ➡️ 'true',false ➡️ 'false'
b. 引用数据类型
Object、Array:先调用toString()方法,如果返回简单数据类型,则可,否则再调用valueOf()方法,如果得到简单数据类型即可,否则报错。
3. Boolean
可以将任意类型数据转为boolean,true ➡️ true,false ➡️ false,除了以下五个,其余全部转为true
undefined、null、0(包括+0和-0)、NaN、''(空字符串)
二、自动/隐式类型转换
主要有三种情况,自动转为boolean、自动转为数值、自动转为字符串(+、-)
1. 自动转为boolean
a. 短路,如:1 && 2 && 3 ➡️ 1,0 && 1 && 2 ➡️ 1
b. !![] ➡️ false
c. 三目/元运算
2. 自动转为数值
a. 除了加,其他四则运算均转为数值
b. 一元运算符,+true ➡️ 1
c.
3. 自动转为字符串
a. 只要a和b相加,只要有一个是字符串,那么就会转为字符串