资讯专栏INFORMATION COLUMN

js的深浅拷贝

tain335 / 653人阅读

摘要:区别深浅拷贝主要的区别的拷贝的层级不同,浅拷贝拷贝的是一层不包括里面的引用数据类型,深拷贝的是多层实现方式浅拷贝完成后的对象如果还拷贝原型对象就删了这句深深拷贝需要判断引用数据类型,貌似还要调用递归的方式。

区别:
深浅拷贝主要的区别的拷贝的层级不同,浅拷贝拷贝的是一层不包括里面的引用数据类型,深拷贝的是多层

实现方式:浅

function shallClone (obj) {
    var obj_kkw = {}; // 拷贝完成后的对象
    for ( var i in obj) {
        if(obj.hasOwnProperty(i)) { // 如果还拷贝原型对象就删了这句
        obj_kkw[i] = obj[i]
        }
    }
    return obj_kkw;
}

深:深拷贝需要判断引用数据类型,貌似还要调用递归的方式。
function deep (ori,tar) {
    var tar = tar || {}
    var tostr = Object.prototype.toString;
    var arrstr = "[object Array]";
    
    for ( let prop in ori) {
         if(ori.hasOwnProperty(prop)) {
             if(ori[prop] !== null && typeof(ori[prop]) == "object") {
                 if(tostr.call(ori[prop]) == arrstr) {
                     tar[prop] == [];
                 } else {
                     tar[prop] == {};
                 }
                 deep (ort[prop], tar[prop]); 
             } else {
                 tar[prop] == ori[prop]
             }
         }   
     }
     return tar;
}



文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/106276.html

相关文章

  • JS专题之深浅拷贝

    摘要:在之前的文章专题之数据类型和类型检测中我有讲过,中的数据类型分为两种,基本数据类型和引用数据类型,基本数据类型是保存在栈的数据结构中的是按值访问,所以不存在深浅拷贝问题。 前言 在开发过程中,偶尔会遇到这种场景,拿到一个数据后,你打算对它进行处理,但是你又希望拷贝一份副本出来,方便数据对比和以后恢复数据。 那么这就涉及到了 JS 中对数据的深浅拷贝问题,所谓深浅拷贝,浅拷贝的意思就是,...

    ASCH 评论0 收藏0
  • 深入理解JS深浅拷贝

    摘要:深拷贝相比于浅拷贝速度较慢并且花销较大。所以在赋值完成后,在栈内存就有两个指针指向堆内存同一个数据。结果如下扩展运算符只能对一层进行深拷贝如果拷贝的层数超过了一层的话,那么就会进行浅拷贝那么我们可以看到和展开原算符对于深浅拷贝的结果是一样。 JS中数据类型 基本数据类型: undefined、null、Boolean、Number、String和Symbol(ES6) 引用数据类型:...

    JackJiang 评论0 收藏0
  • 9012年,当我们讨论js深浅拷贝时我们在说些什么?

    摘要:正文讨论深浅拷贝,首先要从的基本数据类型说起根据中的变量类型传递方式,分为值类型和引用类型,值类型变量包括。当你拷贝的对象有多级的时候,就是深拷贝。数据不存在则对其拷贝。 前言: 本文主要阅读对象:对深浅拷贝印象模糊对初级前端,想对js深浅拷贝聊一聊的中级前端。 如果是对这些有完整对认知体系和解决方法的大佬,可以选择略过。 正文: 讨论深浅拷贝,首先要从js的基本数据类型说起: 根据 J...

    xeblog 评论0 收藏0
  • 深浅拷贝

    摘要:深复制实现代码如下第一种方法通过递归解析解决第二种方法通过解析解决作者六师兄链接原生深拷贝的实现处理未输入新对象的情况通过方法构造新的对象 深浅拷贝针对的是 对象类型,如果是字符串的数组用[...arr],还是不会影响 要区分针对数组的深浅拷贝(默认情况为里面没有对象的数组),与针对对象的深浅拷贝 JavaScript数组深拷贝和浅拷贝的两种方法 let a1 = [1, 2]; ...

    Karrdy 评论0 收藏0
  • 复习Javascript专题(四):js深浅拷贝

    摘要:基本数据类型的复制很简单,就是赋值操作,所以深浅拷贝也是针对,这类引用类型数据。它会抛弃对象的。另外,查资料过程中还看到这么一个词结构化克隆算法还有这一篇资料也有参考,也写得比较详细了的深浅拷贝 基本数据类型的复制很简单,就是赋值操作,所以深浅拷贝也是针对Object,Array这类引用类型数据。 浅拷贝对于字符串来说,是值的复制,而对于对象来说则是对对象地址的复制;而深拷贝的话,它不...

    MobService 评论0 收藏0
  • 一篇文章彻底搞懂JS深浅拷贝和const

    摘要:图数据类型图引用类型深浅拷贝问题不知道什么是深拷贝和浅拷贝的请先去并在调试台自己操作一下,这篇文章只会说明为何中会有这种问题。所以有的时候我们为了避免浅拷贝,会用一些方式实现深拷贝。 首先要了解的js基础 基本数据类型:Object、undefined、null、Boolean、Number、String、Symbol (ES6新加) Object包括: Array 、Date 、R...

    MyFaith 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<