最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript对象的深复制

来源:懂视网 责编:小采 时间:2020-11-27 20:23:13
文档

JavaScript对象的深复制

JavaScript对象的深复制:js的数据类型可以分为两大类:值类型(原始类型):比如String、Number类型都是值类型。引用类型:比如Object、Array是引用类型。简单说一下他们两者的区别:最明显的区别就是赋值。值类型的赋值是真正的copy一份赋给新的变量的:var a, b = &q
推荐度:
导读JavaScript对象的深复制:js的数据类型可以分为两大类:值类型(原始类型):比如String、Number类型都是值类型。引用类型:比如Object、Array是引用类型。简单说一下他们两者的区别:最明显的区别就是赋值。值类型的赋值是真正的copy一份赋给新的变量的:var a, b = &q
js的数据类型可以分为两大类:

  • 值类型(原始类型):
    比如String、Number类型都是值类型。

  • 引用类型:
    比如Object、Array是引用类型。

  • 简单说一下他们两者的区别:
    最明显的区别就是赋值。值类型的赋值是真正的copy一份赋给新的变量的:

    var a, b = "issax";
    a = b;
    a +="_coder";
    console.log(a); //issax_coder
    console.log(b); //issax

    看上面的例子,将b赋值给a之后,a、b两个变量就是相互独立的,改变自身的值不会影响到对方,这就是值类型。

    然后看看引用类型:

    var obj_i, obj_ii = { name: 'issax' };
    obj_i = obj_ii;
    obj_i['career'] = 'coder';
    console.log(obj_i); //Object {name: "issax", career: "coder"}
    console.log(obj_ii); //Object {name: "issax", career: "coder"}

    看到没有,将obj_ii的值赋给obj_i后,改变obj_i的内容,会连同obi_ii的内容也改变,这就是引用类型。引用类型的变量存储并不是内容本身,而是指向内容的一个指针,没错,你赋值的时候其实只是将这个指针赋值给了新变量,他们都指向同一个内容,为什么出现上面的情况就不言而喻了。

    握草,我在说什么gui,我是来说对象的深复制的啊[捂脸]

    复制又可以分为浅复制和深复制,看完上面例子,大概联想一下就知道什么是浅复制什么是什么深复制了,
    平常的值类型的赋值过程就是深复制,而引用类型的赋值就是浅复制。

    既然对象是引用类型,那么它平常的赋值过程就是浅复制了,但是啊,有时候对象也是需要深交的,握草,我说了什么gui,是深复制。

    比如,前两天在做Vue,遇到一个需求,要按name来排序,奇数次click就排序,偶数次click就恢复原来的按更新时间排序。这Tm还不简单,每次都sort一下不就好了。真Tm这样做就sb了,尼玛你想一下,除了第一次排序是有意义的,第二三四五六七八……有什么意义,他们都是重复的,每次sort一下不是很浪费性能吗!那么就该将sort后的对象存储起来……
    然后就gg了,对象是引用类型,一开始我直接赋值了,然后场面一度十分尴尬,数据根本不动[捂脸];

    要想属性一个一个的递归复制吗?然后我的对象是类似这样的:


    Paste_Image.png

    握草,真递归复制就sb啦,好在想到个好办法,值类型是深复制的,这Tm将引用类型转成值类型不就o了吗[狂喜]
    小二,上代码:

    function deepCopy(sender){
     var temp = JSON.stringify(sender);
     return JSON.parse(temp);
    } 
    var obj_i, obj_ii = { name: 'issax' };
    obj_i = deepCopy(obj_ii);
    obj_i['career'] = 'coder';
    console.log(obj_i); //Object {name: "issax", career: "coder"}
    console.log(obj_ii); //Object {name: "issax"}


    Paste_Image.png

    文档

    JavaScript对象的深复制

    JavaScript对象的深复制:js的数据类型可以分为两大类:值类型(原始类型):比如String、Number类型都是值类型。引用类型:比如Object、Array是引用类型。简单说一下他们两者的区别:最明显的区别就是赋值。值类型的赋值是真正的copy一份赋给新的变量的:var a, b = &q
    推荐度:
    标签: 复制 js 拷贝
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top