一、隐式转换
隐式转换的概念:在运算中,如果两个数据的数据类型不同,js会自动将某个数据转换成和另一个数据相同的数据类型,这种转换无需用户操作,所以称之为隐式转换。
1、加法中的隐式转换
- 数字和布尔值做运算,布尔值true会转换成数字1,false会转换成数字0,然后再做加法。
- 数字和字符串做加法,数字会隐式转换成字符串,两者做字符串拼接。
- 字符串和布尔值做加法,布尔值会转换成字符串,做字符串拼接。
var a = "abc";
var b = true;
var c = false;
console.log(a+b); //"abctrue"
console.log(a+c); //"abcfalse"
2、减乘除取模运算中的隐式转换
- 布尔值在和数字之间做减乘除取模的时候,布尔值会隐式转换成数字true是1,false是0。
- 字符串做减乘除取模时,会尝试转换成数字,如果字符串中全是数字,则将字符串转换成数字类型,如果字符串中有非数字字符,则运算结果返回NaN。
二、强制转换
1. parseInt()
- 尝试将字符串转换成数字类型,整数型。
- 如果字符串的内容是纯数字,如“33” => 33
- 如果字符串的内容是数字开头,如“33px” => 33
- 字符串的内容非数字开头,如“px33” => NaN
- 布尔值直接是NaN
let str01 = '33'
let str02 = '33px'
let str03 = 'px33'
let str04 = true
console.log(parseInt(str01)) //33
console.log(parseInt(str02)) //33
console.log(parseInt(str03)) //NaN
console.log(parseInt(str04)) //NaN
2. Number()
- 将数据转换成数字。
- 内容是纯数字的字符串,会转换成数字
- 布尔值会转换成数字
- 字符串中有非数字 就抓换成NaN
3. Boolean()
- 将数据类型转换成布尔值。
- 转换成fasle的六种情况:false,undefined,0,空字符串(“”),NaN,null
- 转换成true的几种情况:true,非0数字,非空字符串,对象,数组,对象集合。
- 注意:即便是空数组、空对象依旧转化为true
let str01 = false
let str02 = ''
let str03 = 0
let str04 = undefined
let str05 = NaN
let str06 = null
let str07 = {}
let str08 = []
console.log(!!str01) //false
console.log(!!str02) //false
console.log(!!str03) //false
console.log(!!str04) //false
console.log(!!str05) //false
console.log(!!str06) //false
console.log(!!str07) //true
console.log(!!str08) //true
4. !取反
! 可将变量转换成boolean类型,false,undefined,0,空字符串(“”),NaN,null取反都为true,其余都为false。常用于逻辑运算。而使用 !! 即可将变量转换成相应的boolean类型,类似于Boolean()