zoukankan      html  css  js  c++  java
  • 对浅拷贝与深拷贝的研究

    浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。

    浅拷贝的实现方式

    • Object.assign():需注意的是目标对象只有一层的时候,是深拷贝
    • Array.prototype.concat()
    • Array.prototype.slice()

    深拷贝就是在拷贝数据的时候,将数据的所有引用结构都拷贝一份。简单的说就是,在内存中存在两个数据结构完全相同又相互独立的数据,将引用型类型进行复制,而不是只复制其引用关系。

    function checkedType (target) {
    // return Object.prototype.toString.call(target).slice(8, -1)
    return Object.prototype.toString.call(target).slice(8,-1)
    }
    function clone(target) {
    //判断拷贝的数据类型
    //初始化变量result 成为最终克隆的数据
    let result,
    targetType = checkedType(target)
    if (targetType === 'Object') {
    result = {}
    } else if (targetType === 'Array') {
    result = []
    } else {
    return target
    }
    //遍历目标数据
    for (let i in target) {
    //获取遍历数据结构的每一项值。
    let value = target[i]
    //判断目标结构里的每一值是否存在对象/数组
    if (checkedType(value) === 'Object' || checkedType(value) === 'Array') {
    //对象/数组里嵌套了对象/数组
    //继续遍历获取到value值
    result[i] = clone(value)
    } else {
    //获取到value值是基本的数据类型或者是函数。
    result[i] = value
    }
    }
    return result
    }
    console.log(clone(111))
  • 相关阅读:
    Mvc+三层(批量添加、删除、修改)
    js中判断复选款是否选中
    EF的优缺点
    Git tricks: Unstaging files
    Using Git Submodules
    English Learning
    wix xslt for adding node
    The breakpoint will not currently be hit. No symbols have been loaded for this document."
    Use XSLT in wix
    mfc110ud.dll not found
  • 原文地址:https://www.cnblogs.com/zhouyideboke/p/11202237.html
Copyright © 2011-2022 走看看