美文网首页
拷贝操作 笔记

拷贝操作 笔记

作者: squidbrother | 来源:发表于2021-03-30 22:09 被阅读0次
基本知识
  • javascript变量包含两种不同数据类型的值:基本类型和引用类型。
  • 基本类型值指的是简单的数据段:
    number、string、boolean、null、undefined、symbol
  • 引用类型值指那些可能由多个值构成的对象:
    object
浅拷贝与深拷贝的区别
  • 浅拷贝只能拷贝一层,深拷贝可以拷贝全部
  • 拷贝的主要目标是复制值(number、string、boolean、null、undefined、symbol),而不是地址(object)
浅拷贝
  1. 数组浅拷贝
//copy一个全新的数组
var a1 = [12,45,47,56,213,4654,154];
var a2 = Array.from(a1);

//slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。
var a1 = [12,45,47,56,213,4654,154];
var a2 = a1.slice(0);
  1. 对象浅拷贝 Object.assign({},source)
var x = {
  a: 1,
  b: { f: { g: 1 } },
  c: [ 1, 2, 3 ]
};
var y = Object.assign({}, x);
深拷贝
  1. 通过递归解析解决
var testObj = {
    a: 1,
    b: {
        name:'zhangsan'
    },
    c: [1,2,3]
};

function deepClone(tar){
    //非对象或者null直接返回
    if(typeof tar != 'object' || tar == null){
        return tar; 
    };
    
    var result;
    if(tar instanceof Array ){
        result = [];
    }else{
        result = {};
    };
    
    for(var attr in tar){
        //忽略掉那些从原型链上继承到的属性
        if(tar.hasOwnProperty(attr)){
            result[attr] = deepClone(tar[attr]);
        };
    }
    
    return result;
}

var obj2 = deepClone(testObj);
obj2.c[1] = 2222;
console.log(testObj);
console.log(obj2);
  1. 通过JSON解析解决 JSON.parse(JSON.stringify(source))
var x = {
  a: 1,
  b: { f: { g: 1 } },
  c: [ 1, 2, 3 ]
};
var y = JSON.parse(JSON.stringify(x));

未完待续...

相关文章

  • 拷贝操作 笔记

    基本知识 javascript变量包含两种不同数据类型的值:基本类型和引用类型。 基本类型值指的是简单的数据段:n...

  • 4.2.5浅拷贝和深拷贝

    浅拷贝:简单的赋值拷贝操作深拷贝:在堆区重新申请空间,进行拷贝操作

  • 2016.10.23

    处理昨天的笔记 数组的操作数组的拷贝System.arraycopy(object src, int srcpos...

  • copy方法和mutableCopy方法的区别

    copy方法指针拷贝,浅拷贝;mutableCopy方法地址拷贝,深拷贝。 简单操作 特性:互不影响原则 可以看到...

  • C++拷贝控制

    拷贝控制操作(copy control) 拷贝构造函数(copy constructor)、拷贝赋值运算符(cop...

  • 深拷贝 浅拷贝

    深入认识深拷贝 浅拷贝 公共方法 // 深拷贝 浅拷贝 对于基本类型来说 对于赋值操作 就是 深拷贝 因为值...

  • 浅拷贝与深拷贝

    *浅拷贝(shallow copy):在浅拷贝操作时,对于被拷贝对象的每一层都是指针拷贝. *深拷贝(one-le...

  • 2019-10-27

    深拷贝和浅拷贝 浅拷贝 切片[:]操作 和copy()函数相同,都是浅拷贝。示例:copy()函数说明:c拷贝一个...

  • Java | 对象克隆

    浅拷贝 默认的克隆操作,也就是Object的 clone 方法是浅拷贝,浅拷贝只会拷贝对象属性的值,而不会拷贝对象...

  • JS文集的目录

    js基础心法 深浅拷贝(递归)深浅拷贝(首层浅拷贝) js 数据处理 数组对象查找的常见操作数组对象去重的常见操作...

网友评论

      本文标题:拷贝操作 笔记

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