zoukankan      html  css  js  c++  java
  • js实现深拷贝的一些方法

    在ECMAScript变量中包含两种不同类型的值:基本类型值和引用类型值。

    基本类型值:Undefined、Null、Boolean、Number、String

    引用类型值:Object、Array、函数等

    基本类型一般就是浅拷贝,引用类型是深拷贝

    简单点来说,声明一个数组A、然后将其赋值给B、当修改B的值时,如果A的值没有变化,说明它是深拷贝,如果A的值一起改变了,那它就是浅拷贝了。

    但需要注意的是:引用类型,如果往深一点讲,也是分浅拷贝和深拷贝,比如数组,涉及二维三维数组。

    下面的方法,只是实现一维的深拷贝。

    实现一维数组深拷贝的一些方法:

    1.使用ES6的语法

    var a=[1,2,3]
    var [...b]=a;//或b=[...a]
    b.push(4);
    console.log(b);//1,2,3,4
    console.log(a)//1,2,3

    2.使用concat()方法

    var a=[1,2,3]
    var c=[];
    var b=c.concat(a);
    b.push(4);
    console.log(b);//1,2,3,4
    console.log(a)//1,2,3

    3.使用slice()方法

    var a=[1,2,3]
    var b=a.slice(0);
    b.push(4);
    console.log(b);//1,2,3,4
    console.log(a)//1,2,3

    4.使用JSON对象的stringify和parse方法

    var a=[1,2,3]
    var c=JSON.stringify(a);
    var b=JSON.parse(c);
    b.push(4);
    console.log(b);//1,2,3,4
    console.log(a)//1,2,3

    参考地址:

    https://www.cnblogs.com/echolun/p/7889848.html

    https://www.cnblogs.com/myzy/p/8561353.html

  • 相关阅读:
    Tomcat中实现IP访问限制
    webservice ssl双向认证配置
    如何更专业的使用Chrome开发者工具
    C++中常量成员函数的含义
    写时拷贝COW(copy-on-write)
    char* 、const char*和string之间的转换
    C++模板特化与偏特化
    lamda表达式和尾置返回类型
    编译期多态和运行时多态
    静态绑定和动态绑定
  • 原文地址:https://www.cnblogs.com/Mrrabbit/p/9392254.html
Copyright © 2011-2022 走看看