美文网首页
JS 里的数据类型转换

JS 里的数据类型转换

作者: 嘁_ | 来源:发表于2019-05-07 14:23 被阅读0次

    将其他的数据类型转换为String 字符串

    1. ?.toString
    2. String(?)
    3. '' + ? 问号此处代表的是其他数据类型
      上面三种方法均不适用于对象object,所得结果是"[object object]"
    1.?.toString方法
    • toString 方法适用于number与Boolean类型
    • 将数值转换为字符串时要注意需要把转换的数值用()括号包起来
    • 对null和undefined使用这种方法时会报错
    null.toString() //Uncaught TypeError: Cannot read property 'toString' of null
    undefined.toString() //Uncaught TypeError: Cannot read property 'toString' of undefined
    
    • 对object使用toString方法时所得结果不准确,均为"[object object]"
    ({}).toString() //"[object Object]"
    
    2. String(?)方法
    • string()方法适用于所有数据类型
    • object类型转换结果依旧为"[object object]"
    3. ' '+?方法
    • 原理:‘+’ 运算符只能相加相同的数据类型,如果两边的数据类型不同,他会优先将其转换成字符串来相加
    • ' ' +?方法适用于所有数据类型
    • object类型转换结果依旧为"[object object]"
    • 此种方法最简洁,但需注意转换数值时不要忘记加括号()

    将其他的数据类型转换为Number 数值

    1. Number(?)
    2. parseInt(?,?)
    3. parseFloat(?)
    4. '?' - 0
    5. + '?'
    1. Number(?)方法
    • Number函数将字符串转为数值,要比parseInt函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN
    • Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组
    Number({a: 1}) // NaN
    Number([1, 2, 3]) // NaN
    Number([5]) // 5
    
    2. parseInt(?,?)方法
    • 如果字符串头部有空格,空格会被自动去除
    • 如果parseInt的参数不是字符串,则会先转为字符串再转换
    parseInt(1.23) // 1
    // 等同于
    parseInt('1.23') // 1
    
    • 字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分
    parseInt('2a') // 2
    parseInt('1e2') // 1
    
    • 如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN
    • parseInt()方法默认转换成十进制,不过需要注意的是,如果参数本身就是number类型,且是0x开头(16进制),或0o开头(八进制),0b开头(二进制),0开头且后面的数字没有8和9(视为八进制),那么parseInt方法会将其以相应的进制转换成十进制展示出来
    parseInt(0o377)  //255
    parseInt(0xff)  //255
    parseInt(0b11)  //3
    
    • 如果字符串以0x或0X开头,parseInt会将其按照十六进制数解析,如果字符串以0开头,将其按照10进制解析

    • 为了防止意外解析成其他进制,建议添加第二个参数按照特定进制解析:如果第二个参数不是数值,会被自动转为一个整数。这个整数只有在2到36之间,才能得到有意义的结果,超出这个范围,则返回NaN。如果第二个参数是0、undefined和null,则直接忽略

    parseInt('1000', 2) // 8
    parseInt('1000', 6) // 216
    parseInt('1000', 8) // 512
    parseInt('10', 37) // NaN
    parseInt('10', 1) // NaN
    parseInt('10', 0) // 10
    parseInt('10', null) // 10
    parseInt('10', undefined) // 10
    
    3. parseFloat(?)方法
    • parseFloat方法用于将一个字符串转为浮点数
    parseFloat('3.14') // 3.14
    
    • 如果字符串符合科学计数法,则会进行相应的转换
    • 如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分
    parseFloat('3.14more non-digit characters') // 3.14
    
    4.'?' - 0方法

    字符串减去零

    '11' - 0 //11
    
    5. + '?'方法
    • 字符串,这里的+并不是取正值的意思,负数一样可行
    + '-011' ; // -11
    

    将其他数据类型转换为Boolean布尔类型

    1. Boolean()
    Boolean(1)  //true
    Boolean({})  //true
    
    2. 双重取反:!! x
    !true //false
    !!true //true
    !!1 //true
    
    五个falsy值,即转换成Boolean后为false得值

    0 、 NaN 、 null 、 undefined 、' ' (空字符串)

    • 所有的object 转换结果都为true

    内存图

    • JS引擎将内存分为代码区和数据区
    • 数据区分为Stack(栈内存)、Heap(堆内存)
    • 简单类型的数据直接存在 Stack 里、复杂类型的数据是把 Heap 地址存在 Stack 里

    垃圾回收

    GC 垃圾回收 如果一个对象没有被引用,那么它就是垃圾,将会被浏览器回收

    • 引用包括事件触发引用,如果一个函数被页面上的事件引用了,也不会算作垃圾被回收,将事件赋值null,就表示不再引用
    • IE6 BUG 无法正常的在页面关闭时,将没有人引用的垃圾正常的清除。设置window.onunload事件,将所有的事件都设置为null
    • 内存泄露:表示该被标记为垃圾的数据没有被标记,内存就会被永久的占用。除非把整个浏览器关闭,否则浏览器就会吃很多的内存,无法再分配新的内存用于存储数据

    深拷贝与浅拷贝

    var b = a
    b = 2 //这个时候改变 b
    

    a 完全不受 b 的影响
    那么我们就说这是一个深复制
    对于简单类型的数据来说,赋值就是深拷贝。
    对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝

    • 赋值操作对另一个对象产生影响叫做浅拷贝

    相关文章

      网友评论

          本文标题:JS 里的数据类型转换

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