TO 布尔类型
规则
转化时,只有 “0/NaN/null/undefined/空字符串” 转成布尔是false,其余的都是true
方式
- Boolean([value])
- ![value] --> 把指定的值转换为布尔类型后取反
- !![value] --> 取反再取反,相当于没有取反,只是把它转换为布尔类型值
- if([表达式])中的表达式会被转换为布尔类型
- A || B 和 A && B 短路表达式会将A转换为布尔类型在做判断
TO 字符串类型
规则
- 原始值 --> 字符串:直接引号包裹内容(大数类把n去除再包裹)
- 对象 --> 字符串:三个方法
方式
- 三种引号包裹
- [value].toString()方法的调用
- 使用字符串拼接+(加号两侧存在字符串或对象则加号从运算功能切换为为字符串拼接功能)。
- 处理流程: 3.1 若 数字 + 字符串,则直接拼接(实质也是先后调用三个方法) 3.2 若 数字 + 对象,则先后调用对象的方法Symbol.toPrimitive、valueOf、toString,一旦获取到原始值则返回,再进行拼接。console.log(xxx)实质也是先后调用三个方法
// 干扰+号的转化
let obj = {
x: 10,
[Symbol.toPrimitive](hint) {
// hint由浏览器判断并传入。
// 传入的是obj对象在将要转化为原始值时将被转化成的类型
// 或手动调用时传入希望其变成的原始值
return this.x
}
}
console.log(1 + obj) //11
TO 数字类型
- 注意:浏览器默认将0开头的数识别为八进制数,(eg:0123 --> 83),0x开头的数识别为十六进制(eg:0xff --> 255)。输出时转为十进制。
规则
- 字符串 --> 数字: 空字符串变为0,只要出现非有效数字则NaN
- 布尔 --> 数字: true变1,false变0
- null变0,undefined变NaN,Symbol不能转、bigint变为正常数字
方式
- +[value]、{...代码块}+[value]、++[value]、[value]++可以将其他类型值转为数字类型(实质也是先后调用三个方法)
- 数字 + 非字符串、非对象,则将转化为数字类型,加号是运算功能(实质也是先后调用三个方法)
- Number([value]):用于隐式转换(eg:运算、isNaN、==)
- parseInt/parseFloat([value],[radix]):将[value]隐式转化为字符串,从第一个字符开始向后截取字符,直到截取到非有效数字,若有效数字一个都没有,则直接NaN。radix指定识别数字的进制,2-36,默认10,指定为0,默认十进制,指定数不在2-36之间,直接NaN。若字符串0x开头,则radix不指定时默认为16
parseInt('b123aaaaa13') // NaN
parseInt(null) //=parseInt('null') NaN
parseInt('1124ba542') //1124