JavaScript-数据类型转换
2019-02-28 本文已影响0人
qh0814
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提供的隐式转换可以快速自动转换一个值的类型,但由于隐式转换有不确定性,且不容易纠错,个人认为在有主观需要转换的地方用显式转换类型