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

JS中数据类型的转换

作者: zzyo96 | 来源:发表于2018-08-12 13:29 被阅读0次

    数据类型转换

    任意类型转String

    1.String(x)


    image.png

    2.x.toString()

    image.png

    3.x+''


    image.png

    任意类型转Number

    1. Number(x)
    2. parseInt(x, 10) [MDN]
    3. parseFloat(x)
    4. x - 0
    5. +x

    任意类型转Boolean

    Boolean(x)
    !!x

    内存图

    1. 你买一个 8G 的内存条
    2. 操作系统开机即占用 512MB
    3. Chrome 打开即占用 1G 内存
    4. Chrome 各每个网页分配一定数量的内存
    5. 这些内存要分给页面渲染器、网络模块、浏览器外壳和 JS 引擎(V8引擎)
    6. JS 引擎将内存分为代码区和数据区
    7. 我们只研究数据区
    8. 数据区分为 Stack(栈内存) 和 Heap(堆内存)
    9. 简单类型的数据直接存在 Stack 里
    10. 复杂类型的数据是把 Heap 地址存在 Stack 里

    遇到问题就画图,不要分析。

    典型题目

    var a = 1
    var b = a
    b = 2
    请问 a 显示是几?  
    答案:1
    
    var a = {name: 'a'}
    var b = a
    b = {name: 'b'}
    请问现在 a.name 是多少?
    答案:'a'
    
    var a = {name: 'a'}
    var b = a
    b.name = 'b'
    请问现在 a.name 是多少?
    答案:'b'
    
    var a = {name: 'a'}
    var b = a
    b = null
    请问现在 a 是什么?
    答案:{name:'a'}
    
    var a 
    a={self:a}
    请问现在a.self是什么?
    答案:undefined
    
    var a = {n:1};
    var b = a;
    a.x=a={n:2};
    请问现在a.x是什么?
    答案:undefined
    请问b.x是什么?
    [object Object]
    

    深拷贝&浅拷贝

    对于简单类型的数据来说,赋值就是深拷贝。
    对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。
    这是一个浅拷贝的例子

    var a = {name: 'frank'}
    var b = a
    b.name = 'b'
    a.name === 'b' // true
    

    因为我们对 b 操作后,a 也变了

    什么是深拷贝了,就是对 Heap 内存进行完全的拷贝。
    下面这个是深拷贝的例子

    var a = {name: 'frank'}
    var b = deepClone(a) // deepClone 还不知道怎么实现
    b.name = 'b'
    a.name === 'frank' // true
    

    GC垃圾回收

    如果一个对象没有被引用他就是垃圾,就要被回收


    image.png

    请问这里的fn是GC吗?当然不是,因为onclick在引用着它所以不能当做GC

    相关文章

      网友评论

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

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