【JavaScript基础】数据类型的转换

65 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

转换类型方法
转换为字符串toString() 、String() 强制转化、加号拼接字符串
转换为数字型parseInt()parseFloat() 、Number()强制转换、js隐式转换(- * /)
转换为布尔型Boolean()方法

显式类型转换(强制转换)

通过调用Number()String()Boolean()三个函数,将任意类型的值,转换成基本数据类型的值:数字、字符串或者布尔值。

1. Number()

Number()的参数为基本数据类型:
  1. 数值:转换后还是原本类型的值
Number(7) //7
  1. 字符串

    a. 如果可以被解析为数值,则转换为相应的数值;不能解析为数值,则为NaN

    b. 空字符串转为0

    Number('7') //7
    Number('7k') //NaN
    Number('') //0
    
  2. 布尔值:true 转成 1,false 转成 0

Number(true) // 1
Number(false) // 0
  1. undefined: 转成NaN
  2. null : 转成0
Number(undefined) // NaN
Number(null) // 0
  1. Symbol: 报错
const s1 = Symbol('web')
Number(s1) 
console.log(Number(s1)) // 报错:类型错误 无法转换为数字
  1. 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()的参数为基本数据类型:
  1. 数值:转换后为相应字符串
  2. 字符串: 转换后还是原本类型的值
  3. 布尔值、undefined、null:转换后为相应字符串
  4. Symbol: 转换后为相应字符串
  5. 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