美文网首页
浅拷贝、深拷贝

浅拷贝、深拷贝

作者: 猿分让我们相遇 | 来源:发表于2017-09-19 00:07 被阅读0次

浅拷贝

var a =  {name:'zhang',age:"2",per:[1,3]};
function clone(obj1){
   var obj2 = {};
    Object.keys(obj1).forEach(function(key){
        obj2[key]=obj1[key];
    });
    return obj2;
};

或者

var obj = { a:1, arr: [2,3] };
var shallowObj = shallowCopy(obj);

function shallowCopy(src) {
  var dst = {};
  for (var prop in src) {
    if (src.hasOwnProperty(prop)) {
      dst[prop] = src[prop];
    }
  }
  return dst;
}

导致的结果就是:

shallowObj.arr[1] = 5;
obj.arr[1]   // = 5

深拷贝

var a = {name:'zhang',age:"2",per:[1,3]};
var b = {};
function copy(obj){
    return b = JSON.parse(JSON.stringify(obj));
}
copy(a); // 返回值b = {name:'zhang',age:"2",per:[1,3]}
b.per[1]=34; // 而a.per[1]=3;

值得注意的是用JSON的方法拷贝不了函数
例如

var a = {name:'zhang',age:"2",per:[1,3],hs:function(){}};

因为JSON数据类型不包含function
JSON数据类型有:
1、数字(整型、浮点数、定点数);
2、字符和字符串;
3、布尔类型。
还有其他数据类型:
一、对象;
二、null;
三、数组。

另外jQuery.extend(obj)

        var  
            obj1 = { a : 'a', b : 'b' },  
            obj2 = {},  
            obj3 = {  x : { xxx : 'oldValue', yyy : 'yyy' },  y : 'y' };   
        $.extend(true, obj1, obj3);   // 第一个参数为true表示执行深度复制  
        $.extend(obj2, obj3);   // deep的默认值为false,表示浅复制  
        console.log(obj1.x.xxx);  // 输出"oldValue"      
        obj3.x.xxx = 'newVlaue';   
        console.log(obj3.x.xxx);  // 输出"newValue"    
        console.log(obj1.x.xxx);  // 输出"oldValue" 因为是深度复制,所以obj1中的属性值的改变不会再obj2中得到体现  
        console.log(obj2.x.xxx);  // 输出"newValue" 因为是浅赋值,仅仅是简单的给对象多添加了一个引用而已  

相关文章

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • iOS--拷贝相关题

    1、什么是深拷贝什么是浅拷贝?浅拷贝和深拷贝的区别 * 浅拷贝(shallow copy):指针拷贝,对于被拷贝对...

  • 2018-10-10day9函数基础

    1.浅拷贝、深拷贝 copy.copy(对象):浅拷贝copy.deepcopy(对象):深拷贝""" """拷贝...

  • 2018-10-10函数基础

    深拷贝和浅拷贝 深拷贝 copy.deepcopy(对象)浅拷贝 copy.copy(对象)深拷贝: 将对象对应的...

  • 深拷贝和浅拷贝

    1.深拷贝:地址的拷贝 2.浅拷贝:是值得拷贝 深拷贝和浅拷贝的区别 A拷贝B B变A变是浅拷贝 A拷贝B B变A...

  • 对象深拷贝和浅拷贝

    浅拷贝 深拷贝 深拷贝的递归方法 深拷贝的JSON方法

网友评论

      本文标题:浅拷贝、深拷贝

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