美文网首页
JavaScript-数据类型转换

JavaScript-数据类型转换

作者: qh0814 | 来源:发表于2019-02-28 03:51 被阅读0次

    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-数据类型转换

          本文链接:https://www.haomeiwen.com/subject/nitfuqtx.html