强制转换主要指 Number()、 String()、Boolean()
Number()
Number函数将字符串转为数值,要比parseInt函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN。都会自动过滤前缀和后缀的空格。parseInt是Number的补充。
例如:
Number(undefined) //NaN
Number('324abc') // NaN
parseInt('324abc') //324
paeseInt('abc324') // NaN
String()
- 数值
String(123) // "123"String('abc') // "abc" - 布尔值
String(true) // "true"String(undefined) // "undefined"
对象
如果参数是对象返回一个类型字符串、如果是数组,返回该数组的字符串形式。
String({a:1}) // "[object Object]"
String([1,2,3]) // "1,2,3"
.toString()
可以将所有数据类型转为字符串 但要排除null和undefined 括号内可以写数字代表进制 例如:.toString(2) // 2进制
const arr = ['tom',12,'rose',18]
arr.toString() // "tom,12,rose,18"
const date = new Date(2023,07,05)
date.toString() // "Sat Aug 05 2023 00:00:00 GMT+0800 (中国标准时间)"
Boolean()
除了五个转换结果为false,其他都为true。
`Boolean(undefined) // false`
`Boolean(null) // false`
`Boolean(0) // false`
`Boolean(NaN) // false`
`Boolean('') // false`
所有对象转换结果都是true。
Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) // true
隐式转换规则
当两个不同类型进行抽象比较时(==),js会将它们转为成统一的数据类型,低层级的数据类型像高层级的数据类型转换,直到“==”左右两边数据类型相同,然后比较数据的值是否相同。 例如: ![] == false为true是因为 ! 会将 [] 直接转换成Boolean,在JS中,将其他数据类型转换成Boolean时,只有空字符串("")、0、null、undefined、NaN会转换成false,其他数据都会转换成true,所以空数组([])会被转换成true,![]为false,!![]为true
复杂数据类型转换规则
-
先使用valueOf()方法获取原始值
-
再使用toString()转成字符串
-
再使用number把字符串转成数字