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 数据拷贝相关推荐

  1. Arcgis Javascript那些事儿(三)---arcgis sever服务器注册关于数据拷贝问题

    1.如何将数据库注册到ARCSERVER服务器 前置知识:在10.1中,服务器端为了确保发布的服务能访问到所需的数据,采取了如下两种措施:1)如果数据注册到了服务器,则服务器会从注册的数据中找到位置列 ...

  2. DTCC:数据库安全重点在数据拷贝过程中

    本文讲的是DTCC:数据库安全重点在数据拷贝过程中,2017年5月11日-13日,2017中国数据库技术大会于北京国际会议中心盛大开幕.作为国内最受关注的数据库技术大会,本届大会以"数据驱动 ...

  3. 软件架构自学笔记----分享“去哪儿 Hadoop 集群 Federation 数据拷贝优化”

    去哪儿 Hadoop 集群 Federation 数据拷贝优化 背景 去哪儿 Hadoop 集群随着去哪儿网的发展一直在优化改进,基本保证了业务数据存储量和计算量爆发式增长下的存储服务质量.然而,随着 ...

  4. 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )

    文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...

  5. 【Android RTMP】x264 图像数据编码 ( NV21 格式中的 YUV 数据排列 | Y 灰度数据拷贝 | U 色彩值数据拷贝 | V 饱和度数据拷贝 | 图像编码操作 )

    文章目录 安卓直播推流专栏博客总结 一. NV21 图像数据中的 YUV 数据简介 二.向 x264 编码图片 三. 提取 NV21 数据中的灰度数据 Y 四. 提取 NV21 数据中的饱和度数据 U ...

  6. 《JavaScript数据可视化编程》——1.4 用离散图表绘制x/y值

    本节书摘来自异步社区<JavaScript数据可视化编程>一书中的第1章第1.4节作者 [美]Stephen A.Thomas 译者 翟东方 , 张超 , 刘畅 责编 陈冀康更多章节内容可 ...

  7. cuda二维数组内存分配和数据拷贝

    uda二维数组内存分配和数据拷贝 2016-04-20 10:54 138人阅读 评论(0) 收藏 举报 分类: 机器学习(11) 人工智能(9) 版权声明:本文为博主原创文章,允许转载. 因为cud ...

  8. sparklines插件_21个实用的Javascript数据图表插件

    21个实用的Javascript数据图表插件 六月 16, 2015 评论 (2) Sponsor 今天主要和大家分享一些统计图表相关的JS插件,图表通常用在网站后台界面,作为一种可视化数据形式展示, ...

  9. 两台电脑间大量数据拷贝的快捷方法

    可能大家会遇到需要将一台电脑里的数据拷贝到另外一台电脑,最常用的方法是用u盘或移动硬盘等存储设备来拷贝,这样速度慢,而且可能拷贝多次才能将数据拷贝完.现提供一种方法,就是通过windows 的文件共享 ...

最新文章

  1. Ajax Toolkit Control ——CollapsiblePanelExtender(隐藏显示效果)
  2. 送一台电脑显示器,我每天办公都用它,安利!
  3. Redis 05_List列表 数组 Hash散列
  4. pdf.js插件使用记录,在线打开pdf
  5. 4.2路由算法与路由协议概述
  6. iOS动画 三维透视投影 m34
  7. Python入门--with语句
  8. Node.js连接mysql报加密方式错误解决方案
  9. c51语言转换ASCII码,ASCII 码和十六进制数的转换 -51单片机
  10. unity 3d 仿真_在Unity3D中构建3D仿真入门,第1部分
  11. AI初创公司新机遇,谷歌苹果竞相收购
  12. 全面了解超声波传感器
  13. html之div整体缩小,如何整体放大或缩小div元素
  14. 机器学习之Kmeans
  15. MySQL中Count和Sum的区别
  16. 超硬核,Nacos实现原理详细讲解
  17. 豆瓣电台WP7客户端 开发记录1
  18. linux下搭建lamp,Linux下搭建LAMP
  19. 张坤(帮别人名字作诗)
  20. Dart plugin not installed; this adds Dart specific functionality. Flutter plugin not installed;

热门文章

  1. C++ 泛型编程 -- 函数模版
  2. 递归/回溯:subsets求子集
  3. Data - 数据思维 - 上篇
  4. python-----利用filecmp删除重复文件
  5. 图书管理系统(源码)
  6. [UML]UML系列——用例图中的各种关系(include、extend)
  7. Springboot源码分析之内嵌tomcat源码分析
  8. Linux环境安装phpredis扩展
  9. Http与RPC通信协议的比较
  10. http header头设置反向代理不缓存