美文网首页
2018-08-29javascript(6)数据类型的转换

2018-08-29javascript(6)数据类型的转换

作者: Lazy一boy | 来源:发表于2018-09-01 10:30 被阅读0次

    .首先说明JS中变量没有限制,可以随时赋予任何值。

    .数据类型转换可以分为两大类,一强制转换,二自动转换。

    一.所谓的强制转换就是通过Number(),String(),和Boolean().三个函数进行转换。这三个函数分别转换成数值,字符串,布尔值。

    1.Number()函数转换有两种情况,一种参数是原始类型的值,另一种参数是对象。

    1.1参数是原始类型的值,有如下规则

    //参数为数值:转换后还是数值
    Number(324) //324
    //参数为字符串:(可以被解析为数值)返回数值
    Number('324') //324
    //参数为字符串:(含有不能被解析为数值的字符)返回NaN
    Number('324abc') //NaN
    //参数为空字符串:返回0
    Number('') //0
    //参数为布尔值:true返回1,false返回0
    Number(true) //1
    Number(false) //0
    //参数为undefined:返回NaN
    Number(undefined) //NaN
    //参数为null:返回0
    Number(null) //0
    

    Number比parseInt严格的很多,一但有不能转换成数值的字符,就返回NaN

    Number('324 dog') //NaN
    parseInt('324 dog') //324
    

    parseInt一个一个的解析字符,二Number整体转换字符串。

    1.2.参数为对象,除了是单个数值的数组返回对应的数值外,其他所有的对象都返回NaN.

    Number({a:1}) //NaN
    Number([1,2,3]) //NaN
    Number([324]) //324
    

    解释就是Number转换有点复杂。他的转换分三个步骤,第一步调用对象的valueOf(),返回原始类型值,就直接使用Number进行转换。第二步如果返回值还是对象,就会调用toString()方法,如果返回原始类型值,就直接使用Number进行转换,第三步,如果toString()返回值还是对象就直接报错。

    2.Sring(),将任意类型的值,转化为字符串。规则如下

    2.1,参数为原始类型值是

    数值:转为相应的字符串。
    字符串:转换后还是原来的值。
    布尔值:true转为字符串"true",false转为字符串"false"。
    undefined:转为字符串"undefined"。
    null:转为字符串"null"。

    String(234) // '324'
    String('324') //'324'
    String('ture') //'true'
    String('false') //'false'
    String(undefined) //'undefined'
    String(nulll) //'null'
    

    2.2参数为对象

    参数为对象时和Number参数为对象的步骤是差不多的,不过String(),它和Number执行的步骤相反,它先执行toString之后再调用valueOf()。
    .如参数为对象就返回类型字符串,如果参数为数组就返回该数组的字符串形式。

    String({a:1}) //'[object object]'
    String([1,2,,3]) //'123'
    

    3.Boolean函数转换。这个就牛了,除了5个会被转换为false之外,其他的经过转换全部为true。

    3.1转换为false的值

    Boolean(undefined) //false
    Boolean(null) //false
    Boolean(+0/-0) //false
    Boolean('') //false
    Boolean(NaN) //false
    

    一切对象转Boolean都是true,包括空对象。

    二.自动转换:三种情况会自动转换,这自动转换建立在强制转换的基础上的。

    1.不同类型的数据进行运算的时候,

    123 + 'abc // '123abc'
    

    2.对非布尔数据类型求布尔值的时候,

    if('abc'){
    console.log('World')
    }
    //' World'
    

    3.对非数值类型的数据使用一元运算符的时候。

    + {foo: 'bar'} // NaN
    - [1, 2, 3] // NaN
    

    (1)自动转为字符串

    .字符串的自动转换,主要发生在字符串的加法运算时。当一个值为字符串,另一个值为非字符串,则后者转为字符串。(规则先将复合类型的值转化为原始类型的值,再将原始类型的值转化为字符串)

    '324' + 1 // '3241'
    '5' + true // "5true"
    '5' + false // "5false"
    '5' + {} // "5[object Object]"
    '5' + [] // "5"
    '5' + function (){} // "5function (){}"
    '5' + undefined // "5undefined"
    '5' + null // "5null"
    

    (2)自动转换为数值

    .除了加法运算符(+)有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。

    '5' - '2' // 3
    '5' * '2' // 10
    true - 1  // 0
    false - 1 // -1
    '1' - 1   // 0
    '5' * []    // 0
    false / '5' // 0
    'abc' - 1   // NaN
    null + 1 // 1
    undefined + 1 // NaN
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:2018-08-29javascript(6)数据类型的转换

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