谈谈JS中的拷贝Copy复制的方法(Javascript拷贝)
拷贝(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拷贝)相关推荐
- html js脚本限制 正则,简单谈谈JS中的正则表达式
1.正则表达式包括两部分 ①定义正则表达式的规则: ②正则表达式的模式(i/g/m): 2.声明正则表达式 ① 字面量声明: var reg = /表达式规则/表达式模式: eg:var reg = ...
- js中style.display=无效的解决方法
本文实例讲述了js中style.display=""无效的解决方法.分享给大家供大家参考.具体解决方法如下: 一.问题描述: 在js中我们有时想动态的控制一个div显示或隐藏或更多 ...
- js中string字符串转换为JSON对象 - 方法大全(4种)
js中string字符串转换为JSON对象 - 方法大全(4种) jQuery插件支持的转换方式: 示例: //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对 ...
- 【javascript基础——系列10】js中隐藏元素的几种方法以及代码
系列文章 [javascript基础--系列1]前端页面ajax连接后台服务器传输数据 [javascript基础--系列2]前端页面axios连接后台服务器传输数据 [javascript基础--系 ...
- 简单谈谈js中的MVC
MVC是什么? MVC是一种架构模式,它将应用抽象为3个部分:模型(数据).视图.控制器(分发器). 本文将用一个经典的例子todoList来展开(代码在最后). 一个事件发生的过程(通信单向流动): ...
- 谈谈JS中的函数劫持
说到劫持,第一反应可能是什么不好的东西.函数劫持并不邪恶,关键是看使用的人.虽然这个概念在前端领域使用较少,但是在安全领域.自定义业务等场景下还是有一定的使用价值的.所以,这一篇文章将会和大家一起去了 ...
- js中实现深拷贝的4种方法
js中深拷贝的方法 原生js中递归函数拷贝 将数据中所有的数据拷贝下来,对拷贝之后的数据进行修改不会影响到原数据 ,两个对象或数组不共享一块内存 <script>let obj={abc: ...
- 深入理解js中实现继承的原理和方法
原型对象继承 原理:原型对象的属性可以经由对象实例访问 下面的例子,所含[对象继承]和[构造函数继承],用于理解[原型属性经由对象实例访问] //对象继承 var person = {name:&qu ...
- js中常用的数组和字符串方法
一:js中常用的数组方法 <script>//函数声明式中的方法const arr=[1,3,6,9,15,19,16];//函数的所有方法 map(),reduce(),filter() ...
最新文章
- vscode教程笔记
- Logstash 父子关系 配置
- java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
- python pyecharts_Python数据可视化之pyecharts
- GVA gin-vue-admin部署后端注意事项
- STL的forward_list链表
- keras中的mini-batch gradient descent (转)
- Juypter 代码自动补全
- Python-print学习
- Linux标准化:避免重蹈UNIX的覆辙
- oracle设置memory_target,oracle初始化参数之memory_target
- Win10设置文件夹背景色
- Foobar2000中文版增强安装版
- 数值分析第二次作业-求解系数矩阵为Hilbert 矩阵的线性方程组
- RAID 独立冗余磁盘阵列详解(RAID 0、RAID 1、RAID 5、RAID 10)
- VS 点击文件自动定位到解决方案资源管理器中文件所在目录位置
- 分享快速检测肖特基二极管的小窍门
- YGG SEA与Solana Ventures达成合作,为东南亚的游戏开发注入活力
- 单片机控制一盏灯的亮与灭程序解释
- win10左下角开始图标点击不能打开
热门文章
- 企业微信群通知机器人
- 预测今晚欧洲杯西班牙VS意大利
- arcgis for android: 绘制带流向箭头的线
- 邮箱账户的破解与邮箱安全防控
- OUTLOOK 2007设置邮件在服务器上保存
- Photoshop中的一些简单操作及图片制作
- C# “System.Data“中不存在类型或命名空间名“OleDbConnection“ 的解决
- 高通骁龙480 5G处理器规格书/datasheet
- Authentication 和 Authorization 的区别
- 黑马程序员django课程