JavaScript 数据拷贝
JavaScript 数据类型
- 基本数据类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
- 引用数据类型:对象( Object )、数组( Array ) 和 方法( Function )
注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。
基本数据类型 是指存放在栈内存中的简单数据段,是按值访问。
引用数据类型 是存放在堆内存中的对象,在栈内存中保存的实际上是对象在堆内存中的引用地址。
数据拷贝相关的方法
1. Lodash提供的 _.clone(value)
方法(浅拷贝
)
该方法的参数为需要拷贝的值,然后将其作为方法的返回值返回给变量。
// 示例
var objects = [{ 'a': 1 }, { 'b': 2 }];var shallow = _.clone(objects);
console.log(shallow[0] === objects[0]);
// => true
2. Lodash提供的_.cloneDeep(value)
方法(深拷贝
)
该方法类似_.clone(value)
方法,它还会递归拷贝value。
// 示例
var objects = [{ 'a': 1 }, { 'b': 2 }];var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false
3. Object.assign()
方法(浅拷贝还是深拷贝需要具体看对象的属性值类型
)
该方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。返回值是目标对象。
因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用。
也就是说,如果对象的属性值为 简单类型,通过该方法拷贝属性值的方式即为深拷贝;如果属性值为 对象或其它引用类型,那对于这个对象而言这种拷贝方式其实是浅拷贝。
4. jQuery.extend()
方法
该方法用于将一个或多个对象的内容合并到目标对象。返回值为目标对象。
语法:$.extend( target [, object1 ] [, objectN ] )
指示是否深度合并
$.extend( [deep ], target, object1 [, objectN ] )
警告: 不支持第一个参数传递 false 。
参数描述
deep 可选,Boolean类型,指示是否深度合并对象,默认为false。如果该值为true,且多个对象的某个同名属性也都是对象,则该"属性对象"的属性也将进行合并。
5. JSON.parse(JSON.stringify(obj))
方法(深拷贝
)
用 JSON.stringify 把对象转换成字符串,再用 JSON.parse 把字符串转换成新的对象。
// 通过js的内置对象JSON来进行数组对象的深拷贝
function deepClone(obj) {let _obj = JSON.stringify(obj);let objClone = JSON.parse(_obj);return objClone;
}
注:可以转成 JSON 格式的对象才能使用这种方法,如果对象中包含 function 或 RegExp 这些就不能用这种方法了。
6. 使用递归的方式实现深拷贝
function _deepClone(source) {let target;if (typeof source === 'object') {target = Array.isArray(source) ? [] : {}for (let key in source) {if (source.hasOwnProperty(key)) {if (typeof source[key] !== 'object') {target[key] = source[key]} else {target[key] = _deepClone(source[key])}}}} else {target = source}return target
}
JavaScript 数据拷贝相关推荐
- Arcgis Javascript那些事儿(三)---arcgis sever服务器注册关于数据拷贝问题
1.如何将数据库注册到ARCSERVER服务器 前置知识:在10.1中,服务器端为了确保发布的服务能访问到所需的数据,采取了如下两种措施:1)如果数据注册到了服务器,则服务器会从注册的数据中找到位置列 ...
- DTCC:数据库安全重点在数据拷贝过程中
本文讲的是DTCC:数据库安全重点在数据拷贝过程中,2017年5月11日-13日,2017中国数据库技术大会于北京国际会议中心盛大开幕.作为国内最受关注的数据库技术大会,本届大会以"数据驱动 ...
- 软件架构自学笔记----分享“去哪儿 Hadoop 集群 Federation 数据拷贝优化”
去哪儿 Hadoop 集群 Federation 数据拷贝优化 背景 去哪儿 Hadoop 集群随着去哪儿网的发展一直在优化改进,基本保证了业务数据存储量和计算量爆发式增长下的存储服务质量.然而,随着 ...
- 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )
文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...
- 【Android RTMP】x264 图像数据编码 ( NV21 格式中的 YUV 数据排列 | Y 灰度数据拷贝 | U 色彩值数据拷贝 | V 饱和度数据拷贝 | 图像编码操作 )
文章目录 安卓直播推流专栏博客总结 一. NV21 图像数据中的 YUV 数据简介 二.向 x264 编码图片 三. 提取 NV21 数据中的灰度数据 Y 四. 提取 NV21 数据中的饱和度数据 U ...
- 《JavaScript数据可视化编程》——1.4 用离散图表绘制x/y值
本节书摘来自异步社区<JavaScript数据可视化编程>一书中的第1章第1.4节作者 [美]Stephen A.Thomas 译者 翟东方 , 张超 , 刘畅 责编 陈冀康更多章节内容可 ...
- cuda二维数组内存分配和数据拷贝
uda二维数组内存分配和数据拷贝 2016-04-20 10:54 138人阅读 评论(0) 收藏 举报 分类: 机器学习(11) 人工智能(9) 版权声明:本文为博主原创文章,允许转载. 因为cud ...
- sparklines插件_21个实用的Javascript数据图表插件
21个实用的Javascript数据图表插件 六月 16, 2015 评论 (2) Sponsor 今天主要和大家分享一些统计图表相关的JS插件,图表通常用在网站后台界面,作为一种可视化数据形式展示, ...
- 两台电脑间大量数据拷贝的快捷方法
可能大家会遇到需要将一台电脑里的数据拷贝到另外一台电脑,最常用的方法是用u盘或移动硬盘等存储设备来拷贝,这样速度慢,而且可能拷贝多次才能将数据拷贝完.现提供一种方法,就是通过windows 的文件共享 ...
最新文章
- 使用JAVA代码实现Android布局(一)RelativeLayout
- windows charles response 乱码解决办法
- 如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理...
- 手机APP应用如何从公网访问本地WEB应用
- Linux RedHat 7 配置本地 YUM源
- Python项目实战-----科比数据集分析
- 单片机超声波测距模块原理与源码解析
- ADXL362 初次使用总结(使用stm32 HAL 库)
- Ubuntu18.04 台式电脑插入耳机没有声音解决办法
- Go 原生插件使用问题全解析
- matlab 正交多项式,求助~Matlab关于正交多项式
- RAR解压、压缩命令
- 41、基于51单片机手机无线充电器系统锂电池存电系统设计
- 企业微信开发,嵌入自定义项目,及JS-SDK的引用
- HTTP 首部:通用首部、请求首部、响应首部和实体首部
- AWS 上的云原生 Jenkins
- 通过倾斜相机本身来增大固定距离内垂直方向测量距离的求解过程
- 数字化转型写书笔记-第43天
- python close_wait_服务器TIME_WAIT和CLOSE_WAIT分析和解决办法
- PS2019/2020使用时,电脑时常卡住不动。