博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅拷贝和深拷贝
阅读量:6576 次
发布时间:2019-06-24

本文共 1838 字,大约阅读时间需要 6 分钟。

浅拷贝:浅克隆之所以被称为浅克隆,是因为对象只会被克隆最外部的一层,至于更深层的对象,则依然是通过引用指向同一块堆内存.

1.第一种方法:

function shadowClone(o) {  const obj = {};  for (let i in o) {    obj[i] = o[i];  }  return obj;}var oldObj = {   a: 1,   b: 3,   c: [1, 3, 5, 7, 9]};var newObj = shadowClone(oldObj);复制代码

第二种:

var oldObj = {   a: 1,   b: 3,   c: [1, 3, 5, 7, 9]};var newObj1 = Object.assign({}, oldObj);复制代码

深拷贝

深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”

// 深拷贝    // 获取类型    function getType(obj) {      var toString = Object.prototype.toString;      var map = {        '[object Boolean]': 'boolean',        '[object Number]': 'number',        '[object String]': 'string',        '[object Null]': 'null',        '[object Undefined]': 'undefined',        '[object Array]': 'array',        '[object Function]': 'function',        '[object RegExp]': 'regExp',        '[object Date]': 'date',        '[object Object]': 'object'      }      if (obj instanceof Element) { // 因为对不同标签,toString会返回对应不同标签的构造函数        return 'element';      }      return map[toString.call(obj)];    }    function deepClone(data) {      var type = getType(data)      var obj;      if (type === 'array') {       obj = []        for (var i = 0; i < data.length; i++) {          obj.push(deepClone(data[i]))        }      } else if (type === 'object') {        obj = {}        for (var key in data) {          obj[key] = deepClone(data[key]);        }      } else {        obj = data;      }      return obj;    }    var oldObj = {      a: 1,      b: 2    }    const newObj = deepClone(oldObj);    const newObj1 = newObj.c = 4;    console.log(oldObj, newObj)    let oldData = [1, 2, 3, 4, 4];    const newData = deepClone(oldData);    const newData1 = newData.push({ a: 4, b: 7 });    console.log(newData, '--->newData', oldData, '---->oldData');复制代码

转载于:https://juejin.im/post/5ce49505e51d4510bf1d65e1

你可能感兴趣的文章
IOS应用之一--异常处理(UncaughtExceptionHandler)
查看>>
linux dialog详解(图形化shell)
查看>>
Php.ini文件位置在哪里 Php.ini文件找不到
查看>>
如何在定制化组件中实现并使用v-model
查看>>
浏览器从输入到输出的过程与原理一
查看>>
c++ const
查看>>
The Little Redis Book
查看>>
java ClassLoader static
查看>>
Android 自定义View修炼-打造完美的自定义侧滑菜单/侧滑View控件(转)
查看>>
程序员在编程中遇到的奇葩弱智问题(转)
查看>>
ldap实现用户认证
查看>>
java基础---->Serializable的使用---- http://www.cnblogs.com/huhx/p/serializable.html
查看>>
快速排序
查看>>
14.UA池和代理池
查看>>
转一篇关于IIS用户权限的帖子
查看>>
Java异常:选择Checked Exception还是Unchecked Exception?
查看>>
mybaits入门
查看>>
C++(实验四)
查看>>
ZLYD团队第一周项目总结
查看>>
基于nodejs的爬虫
查看>>