JS 里的类型

作者: Grit0821 | 来源:发表于2019-01-21 23:16 被阅读0次

    类型转换

    • 任意类型转字符串
    1. String(x)
    2. x.toString()
    3. x + ''使用空字符串,此方法简便好用
    • 任意类型转数字
    1. Number(x)
    2. parseInt(x, 10)指定十进制
    3. parseFloat(x)
    4. x - 0使用数字0,此方法简便好用
    5. +x 前面加一个正号+
    • 任意类型转布尔
    1. Boolean(x)
    2. !!x

    内存图

    • 数据区分为 Stack(栈内存) 和 Heap(堆内存)
    • 简单类型(除对象以外)的数据直接存在 Stack 里
    • 复杂类型(对象)的数据是把 Heap 地址存在 Stack 里
    • 面试题1
    var a = {name: 'a'}
    var b = a
    b = {name: 'b'}
    请问现在 a.name 是多少?
    'a'
    
    image.png
    • 面试题2
    var a = {name: 'a'}
    var b = a
    b.name = 'b'
    请问现在 a.name 是多少?
    'b'
    
    image.png
    • 面试题3
    var a = {name: 'a'}
    var b = a
    b = null
    请问现在 a 是什么?
    'a'
    
    image.png

    深拷贝

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

    • 深拷贝
    var a = 1
    var b = a
    b = 2 //这个时候改变 b
    a 完全不受 b 的影响
    那么我们就说这是一个深复制
    
    • 浅拷贝
    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
    

    相关文章

      网友评论

        本文标题:JS 里的类型

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