拷贝(Copy),都是基于引用类数据来说的,基本数据类型直接在Heap中直接拷贝一份,引用数据类型分为浅拷贝和深拷贝;

虽然现在有很多数据库,直接封装好了一部分代码,我们直接引用就可以,比如Lodash,它的代码封装比较完善,但是我们还是要简单了解下拷贝的知识;

浅拷贝:复制的是一个引用地址,如果地址内的内容发生改变,所有的内容都会改变;

深拷贝:在内存中开辟出一块地盘,存放复制过来的对象;

例子我就不写了,直接封装函数,然后调用就可以了,有浅拷贝和深拷贝的几种写法,如有错,请指正,也不是我的原创,毕竟只是知识点,但是不知道转载谁的,所以如有侵权,请告知,谢谢

方法一: $qian();

function $qian(obj) {

let newObj = {};

for (let a in obj) {

if (obj.hasOwnProperty(a)) {

newObj[a] = obj[a];

};

};

return newObj;

};

方法二:$copy(a) 也是浅拷贝的一种

function $copy (obj){

return Array.isArray(obj) ? [...obj] : {...obj}

// return obj instanceof Array ? [...obj] : {...obj}

}

方法三 Object.assign(); 也是浅拷贝的一种

function copyAssign(obj) {

return obj instanceof Array ? Object.assign([],obj) : Object.assign({},obj);

}

方法四 JSON.parse(JSON.stringify());深拷贝的一种,通过JSON的转换,变成一个新的对象

function copyJSON(obj) {

return JSON.parse(JSON.stringify(obj))

}

方法五 递归的封装Copy   深拷贝的一种

function deepCopy1(obj) {

const getType = (obj) => {

if (typeof obj !== 'object') {

return obj;

};

return Object.prototype.toString.call(obj).slice(8, -1);

};

let newObj = getType(obj) == 'Array' ? [] : {};

for (let a in obj) {

newObj[a] = typeof obj[a] === 'object' ? deepCopy1(obj[a]) : obj[a];

};

return newObj;

}

方法六 ;就是外部引用lodash文档,使用封装好的copy刚能函数

如果还有其他的方法,欢迎大家来交流

谈谈JS中的拷贝Copy复制的方法(Javascript拷贝)相关推荐

  1. html js脚本限制 正则,简单谈谈JS中的正则表达式

    1.正则表达式包括两部分 ①定义正则表达式的规则: ②正则表达式的模式(i/g/m): 2.声明正则表达式 ① 字面量声明: var reg = /表达式规则/表达式模式: eg:var reg = ...

  2. js中style.display=无效的解决方法

    本文实例讲述了js中style.display=""无效的解决方法.分享给大家供大家参考.具体解决方法如下: 一.问题描述: 在js中我们有时想动态的控制一个div显示或隐藏或更多 ...

  3. js中string字符串转换为JSON对象 - 方法大全(4种)

    js中string字符串转换为JSON对象 - 方法大全(4种) jQuery插件支持的转换方式: 示例: //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对 ...

  4. 【javascript基础——系列10】js中隐藏元素的几种方法以及代码

    系列文章 [javascript基础--系列1]前端页面ajax连接后台服务器传输数据 [javascript基础--系列2]前端页面axios连接后台服务器传输数据 [javascript基础--系 ...

  5. 简单谈谈js中的MVC

    MVC是什么? MVC是一种架构模式,它将应用抽象为3个部分:模型(数据).视图.控制器(分发器). 本文将用一个经典的例子todoList来展开(代码在最后). 一个事件发生的过程(通信单向流动): ...

  6. 谈谈JS中的函数劫持

    说到劫持,第一反应可能是什么不好的东西.函数劫持并不邪恶,关键是看使用的人.虽然这个概念在前端领域使用较少,但是在安全领域.自定义业务等场景下还是有一定的使用价值的.所以,这一篇文章将会和大家一起去了 ...

  7. js中实现深拷贝的4种方法

    js中深拷贝的方法 原生js中递归函数拷贝 将数据中所有的数据拷贝下来,对拷贝之后的数据进行修改不会影响到原数据 ,两个对象或数组不共享一块内存 <script>let obj={abc: ...

  8. 深入理解js中实现继承的原理和方法

    原型对象继承 原理:原型对象的属性可以经由对象实例访问 下面的例子,所含[对象继承]和[构造函数继承],用于理解[原型属性经由对象实例访问] //对象继承 var person = {name:&qu ...

  9. js中常用的数组和字符串方法

    一:js中常用的数组方法 <script>//函数声明式中的方法const arr=[1,3,6,9,15,19,16];//函数的所有方法 map(),reduce(),filter() ...

最新文章

  1. vscode教程笔记
  2. Logstash 父子关系 配置
  3. java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
  4. python pyecharts_Python数据可视化之pyecharts
  5. GVA gin-vue-admin部署后端注意事项
  6. STL的forward_list链表
  7. keras中的mini-batch gradient descent (转)
  8. Juypter 代码自动补全
  9. Python-print学习
  10. Linux标准化:避免重蹈UNIX的覆辙
  11. oracle设置memory_target,oracle初始化参数之memory_target
  12. Win10设置文件夹背景色
  13. Foobar2000中文版增强安装版
  14. 数值分析第二次作业-求解系数矩阵为Hilbert 矩阵的线性方程组
  15. RAID 独立冗余磁盘阵列详解(RAID 0、RAID 1、RAID 5、RAID 10)
  16. VS 点击文件自动定位到解决方案资源管理器中文件所在目录位置
  17. 分享快速检测肖特基二极管的小窍门
  18. YGG SEA与Solana Ventures达成合作,为东南亚的游戏开发注入活力
  19. 单片机控制一盏灯的亮与灭程序解释
  20. win10左下角开始图标点击不能打开

热门文章

  1. 企业微信群通知机器人
  2. 预测今晚欧洲杯西班牙VS意大利
  3. arcgis for android: 绘制带流向箭头的线
  4. 邮箱账户的破解与邮箱安全防控
  5. OUTLOOK 2007设置邮件在服务器上保存
  6. Photoshop中的一些简单操作及图片制作
  7. C# “System.Data“中不存在类型或命名空间名“OleDbConnection“ 的解决
  8. 高通骁龙480 5G处理器规格书/datasheet
  9. Authentication 和 Authorization 的区别
  10. 黑马程序员django课程