JavaScript-数据类型转换

JavaScript一共有7种数据类型,由于JavaScript是一种动态类型的语言,所以变量的数据类型是不确定的,随时可以变动。数据类型的转换可分为:

1.强制转换(显式转换)

undefined、null由于只有一个值,在这里不讨论如何转换为该类型。

1.1 转换为number

  • Number()
    任意类型转为数值
Number('123') //  123 将字符串转为对应数值
Number('123number') //NaN 对于字符串中的非number部分则无法解析,返回NaN
Number('number123') // NaN 
Number('') // 0 空字符串返回0
Number(undefined) // NaN
Number(null)  // 0
Number(true) //1
Number(false) //0
Number(' 123 ') // 123 自动忽略前缀和后缀的空格
  • ParseInt()
    字符串转为整数,该函数从第一个字符开始逐个解析,当遇到无法解析的字符时,直接返回已转好的部分。该函数有2个可选的参数:
    第一个参数:待转换的字符串,可空
parseInt()  //NaN  为空时返回NaN
parseInt('')  //NaN
parseInt('123')  //123
parseInt('1.23')  // 1 从第一个字符开始,这里的小数点无法解析,直接返回解析好的1
parseInt('b1')  //NaN  若第一个字符无法解析,则返回NaN
parseInt('-1')  // -1 第一个字符若是正负号,则可以正常解析
parseInt('0xa') //10 支持10进制外的表示法
parseInt('0xg') //NaN 若字符不属于该进制,则返回NaN
parseInt(true) //NaN 若参数不为字符串,则先自动转换类型为字符串

第二个参数:按几进制的规则来转换,默认为10,可空

parseInt('100',2) //4
parseInt('100',8) //64
parseInt('100',16) //256
parseInt('1002',2) //4 若有字符不属于该进制,则忽略该字符
parseInt('200',2) //NaN 若首字符不属于该进制,则返回NaN
  • parseFloat()
    字符串转为浮点数
    该函数的转换规则同parseInt()
parseFloat() //NaN
parseFloat('1.23') //1.23
parseFloat('parseFloat 1.23') //NaN
parseFloat('1.23parseFloat') //1.23
parseFloat('true') //NaN
parseFloat('123e-3') //0.123  支持科学计数法

3个方法的比较:

  • Number()能将任意类型(包括对象)转为数值,而后两者实际上是将字符串转为数值。
  • Number()比parseInt()更为严格,parseInt()会返回一部分已经转换完毕的内容,Number()若存在一个无法转换的字符则返回NaN。
  • 三者都属于全局方法。

1.2 转换为string

  • String()
    任意类型转为字符串
String(123) //'123'  数值直接转换成对应的string
String(314e-2) // '3.14' 支持科学计数法
//布尔值、undefined、null转成对应的字面字符 
String(true) // 'true'   
String(undefined) // 'undefined'
String(null) // 'null'    
  • .toString
(123).toString() //'123' 单纯的数值必须加括号,否则报错
 var a = 123
 a.toString() //'123'  
true.toString() //'true' 布尔值可以不加括号
({a:1}).toString() //'[object object]'

注:该方法不适用于null、undefined

1.3转换为boolean

  • Boolean()
    任意类型转为布尔值
//除了这5个值其余的都将被转为true
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false

2.自动转换(隐式转换)

有很多情况JavaScript会对值进行自动转换,但总体遵循着这样的规则:
在预期得到某类型值的地方,就会用转换该类型的方法自动转换。
比如:

typeof(1 + 'string') //'string'

可以看出这里预期得到string,尽管是number类型和string相加。所以这里会用转为string的方法进行自动转换。结果如下:

1 + 'string' // '1string'

一些通过隐式转换的简易转换方法:

  • !!两个前置逻辑运算符快速将值转为布尔值,详情见我基本数据类型布尔值部分的blog
  • 上面提到过的 + 运算符可以自动转为string
'length=' + 6 // 'length=6'
  • 乘、除、减运算符可以把运算子自动转为number
2 * '2' //4
true - 1 //0
5 / false //Infinity

JavaScript提供的隐式转换可以快速自动转换一个值的类型,但由于隐式转换有不确定性,且不容易纠错,个人认为在有主观需要转换的地方用显式转换类型

你可能感兴趣的:(JavaScript-数据类型转换)