持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
| 转换类型 | 方法 |
|---|---|
| 转换为字符串 | toString() 、String() 强制转化、加号拼接字符串 |
| 转换为数字型 | parseInt() 、parseFloat() 、Number()强制转换、js隐式转换(- * /) |
| 转换为布尔型 | Boolean()方法 |
显式类型转换(强制转换)
通过调用Number()、String()和Boolean()三个函数,将任意类型的值,转换成基本数据类型的值:数字、字符串或者布尔值。
1. Number()
Number()的参数为基本数据类型:
- 数值:转换后还是原本类型的值
Number(7) //7
-
字符串
a. 如果可以被解析为数值,则转换为相应的数值;不能解析为数值,则为NaN
b. 空字符串转为0
Number('7') //7 Number('7k') //NaN Number('') //0 -
布尔值:true 转成 1,false 转成 0
Number(true) // 1
Number(false) // 0
- undefined: 转成NaN
- null : 转成0
Number(undefined) // NaN
Number(null) // 0
- Symbol: 报错
const s1 = Symbol('web')
Number(s1)
console.log(Number(s1)) // 报错:类型错误 无法转换为数字
- BigInt: 去掉n,转换为相应的数值
const b1 = 789n
const b2 = BigInt("123")
const b3 =BigInt(10)
Number(b1) // 789
Number(b2) // 123
Number()的参数为对象:
返回NaN(参数为单个数值的数组,返回对应数值)
Number({a: 1}) // NaN
Number([53,34]) // NaN
Number(['7']) // 7
转换规则:
- 调用对象自身的valueOf()方法
- 如果返回的是基本数据类型,则调用Number()函数进行转换。
- 如果返回的是引用数据类型,则调用对象自身的toString()方法,
- 如果toString的返回值是基本数据类型,则对该值调用Number()函数进行转换。
- 如果toString的返回值是引用数据类型,则报错。
parseInt() 和 parseFloat()
parseInt():把值转换成整数
如果该值不是一个字符串,则将其转换为字符串(toString()方法),从字符串左侧第一字符查找,直到遇到一个非有效数字(包括.运算符),把找到有效数字转为数字
parseInt(string, radix);
//radix为可选参数,从 2 到 36,表示字符串的进制数。
//如果 radix 没有指定或者为 0,string会被假定以10进制来解析,如果string以 0x 或 0X 开头,会假定以16进制来解析。
parseInt('7q'); //7
parseInt('q7'); //NaN
parseInt('');//NaN
parseInt(77.45) // 77
parseFloat():把值转换成浮点数
字符串左侧第一字符查找,直到遇到一个非数字,把找到有效数字转为数字
parseFloat(string)
parseFloat('7.5a') //7.5
parseFloat('a7.5') //NaN
parseFloat(75.74) //75.74
注:第一个字符就是非数字,则返回NaN(参数值为字符串)
2. String()
String()的参数为基本数据类型:
- 数值:转换后为相应字符串
- 字符串: 转换后还是原本类型的值
- 布尔值、undefined、null:转换后为相应字符串
- Symbol: 转换后为相应字符串
- BigInt: 去掉n,转换为相应字符串
String(2) //'2'
String('a') // 'a'
String(true) // 'true'
String(false) // 'false'
String(undefined) // 'undefined'
String(null) // 'null'
const s1 = Symbol('web')
const b1 =789n
String(s1) // 'Symbol(web)'
String(b1) // '789'
String()的参数为对象:
返回类型字符串(为数组,返回该数组的字符串形式)
String({a: 1}) // "[object Object]"
String([]) // '' 空数组转为空字符串
String([1, 2]) // "1,2"
String([1, null, 2]) // '1,,2' 数组中的null或undefined,会被当做空字符串处理
转换规则:
- 调用对象自身的toString()方法
- 如果返回的是基本数据类型,则调用String()函数进行转换。
- 如果返回的是引用数据类型,则调用对象自身的valueOf()方法
如果valueOf的返回值是基本数据类型,则对该值调用String()函数进行转换,
如果valueOf的返回值是引用数据类型,则报错。
3. Boolean()
Boolean()函数可以将任意类型的值转为布尔值。
除了undefined,null,0,NaN,空字符串结果为false,其它类型的值都为true。
隐式类型转换(自动转换)
JavaScript 期望得到某种类型的值,而实际的值不是期望的类型,就会自动调用该类型的转换函数转换数据类型
1. 转换为数值
系统内部会自动调用Number()函数,将非数值的值转换为数值
减、乘、除(- * /)运算符会把运算符两侧的运算值,自动转成数值
加法运算符的两侧任意一个操作数是字符串,那么这个'+'就表示字符串拼接。
true - '1' // 0
'5' * [] // 0
false / '5' // 0
null + 1 // 1
undefined + 1 // NaN
12+'5' // '125'
2. 转换为字符串
在字符串拼接(+)时,当其中一个值为字符串,则另一个非字符串的值会自动转为字符串。
'7' + true // '7true'
// 先将引用数据类型的值转为基本数据类型的值,再将基本数据类型的值转为字符串。
'7' + {} // '7[object Object]'
'7' + [] // '7'
'7' + undefined // '7undefined'
'7' + null // '7null'
3. 转换为布尔值
系统内部会自动调用Boolean()函数,将非布尔值的值转换为布尔值
除了undefined,null,0,NaN,空字符串自动转为false,其它类型的值都自动转为true。
//if语句的条件,会将非布尔值的值转换为布尔值
if ( !undefined
&& !null
&& !0
&& !NaN
&& !''
) {
console.log(true);
}
1 + 1 ? true : false // true