知识点一:js中的对象

谈到对象的拷贝,必定要说一下对象的概念。js中的数据类型分为两大类:原始类型和对象类型。(1)原始类型包括:数值、字符串、布尔值、null、undefined(后两个是特殊的原始值,这里不做详细的说明,我的上一篇博客有谈到过一些)(2)对象类型包括:对象即是属性的集合,当然这里又两个特殊的对象----函数(js中的一等对象)、数组(键值的有序集合)。好了既然对象分为这两类,这两种类型在复制克隆的时候是有很大区别的。
原始类型存储的是对象的实际数据,而对象类型存储的是对象的引用地址(对象的实际内容单独存放,为了减少数据开销通常存放在内存中)。ps:说到这里,大家要知道,对象的原型也是引用对象,它把原型的方法和属性放在内存当中,通过原型链的方式来指向这个内存地址。

知识点二:拷贝的概念

浅度拷贝:原始类型为值传递,对象类型仍为引用传递。深度拷贝:所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中。

知识点三:数组的拷贝

  • 数组深拷贝方式一:for循环
var arr = [1,2,3,4,5]
var arr2 = copyArr(arr)
function copyArr(arr) {let res = []for (let i = 0; i < arr.length; i++) {res.push(arr[i])}return res
}
  • 数组深拷贝方式二:通过数组的slice()方法
var arr = [1,2,3,4,5]
var arr2 = arr.slice(0)
arr[2] = 5
console.log(arr)
console.log(arr2)原理:这个代码实现非常简单。原理也比较好理解,他是将原数组中抽离部分出来形成一个新数组。我们只要设置为抽离全部,即可完成数组的深拷贝
  • 数组深拷贝方式三:使用数组的concat()方法
var arr = [1,2,3,4,5]
var arr2 = arr.concat()
arr[2] = 5
console.log(arr)
console.log(arr2)原理:这个代码也非常简单,原理更加粗暴。它是用于连接多个数组组成一个新的数组的方法。那么,我们只要连接它自己,即可完成数组的深拷贝
  • 数组深拷贝方式四:使用jQuery的$.extend()方法
var newJson = jQuery.extend(true,{}, json);

知识点四:对象的拷贝

  • 对象深拷贝方式一:for循环
var obj = {name: 'FungLeo',sex: 'man',old: '18'
}
var obj2 = copyObj(obj)
function copyObj(obj) {let res = {}for (var key in obj) {res[key] = obj[key]}return res
}原理:就是把元对象的内容循环放进新的数组里面
  • 对象深拷贝方式二:利用json对象
var obj = {name: 'FungLeo',sex: 'man',old: '18'
}
var obj2 = JSON.parse(JSON.stringify(obj))

原文链接:http://blog.csdn.net/fungleo/article/details/54931379

js对象、数字深拷贝方式(转)相关推荐

  1. js对象继承的方式-三种 +三种

    一.原型链继承 每个构造函数都有一个原型对象,原型对象中都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针.当原型对象等于另外一个类型的实例即继承. 缺点:如果某一个构造函数实例对象 ...

  2. JS对象的深拷贝常用的四种方法

    1.for循环完成深拷贝 2.通过JSON.stringify() 和 JSON.parse() 将对象转为字符串之后在转为对象. 3.使用拓展运算符+解构赋值(该方法的局限性在于,当值为undefi ...

  3. JS 对象数组深拷贝

    1. JSON.parse(JSON.stringify(value)) 2. nums.slice(0)

  4. js中自定义对象、json对象、json字符串、普通js对象 --js学习那本书上的

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

  5. js中自定义对象、json对象、json字符串、普通js对象

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

  6. 原生js实现对象的深拷贝及循环引用

    我们使用Object.assign(target,-sources)时,其实只是浅拷贝.只能复制第一层属性,而如果第一层属性中有对象或数组的话,其实只是对对象或数组的引用而已. 我们修改target里 ...

  7. Js将字符串转数字的方式

    Js将字符串转数字的方式 Js字符串转换数字方方式主要有三类:转换函数.强制类型转换.弱类型隐式类型转换,利用这三类转换的方式可以有5种转换的方法. parseInt() parseInt()和Num ...

  8. JS对象拷贝:深拷贝和浅拷贝

    摘要:对象拷贝,简而言之就是将对象再复制一份,但是,复制的方法不同将会得到不同的结果. 本文分享自华为云社区<js对象深浅拷贝,来,试试看!>,作者: 北极光之夜.. 一.速识概念: 对象 ...

  9. js 对象深拷贝、对象数组深拷贝的几种方法总结

    写前端的时候经常会遇到对象的拷贝,一般我们会用到深拷贝,深拷贝就是完完整整的将一个对象从内存中拷贝一份出来,放到另一块新开辟的内存中去.向下面这种赋值是浅拷贝,a.b都是对同一块内存进行引用,a.b哪 ...

最新文章

  1. python quirk
  2. Quartus II调用modelsim无缝仿真
  3. Nginx与安全有关的几个配置
  4. VMWare共享文件
  5. C++动态数组简单的模拟二元堆
  6. MS SQL 2008 发布订阅配置错误总结
  7. 白帽子讲web安全——访问控制
  8. [MFC] CDialog::DoModal()函数用法
  9. Web.config常用节点解析:
  10. arguments.callee 指向正在执行的函数的指针
  11. Spring AOP会忽略从父类继承的方法
  12. 定时自动关机计划命令
  13. 10秒钟搞定圆柱齿轮设计所有课题
  14. 计算机软件高级职称有啥用,计算机软考高级职称有什么用
  15. linux基础教程 ppt,Linux基础教程(1)操作系统基础 PPT
  16. Python+Django毕业设计中小型企业工作日志管理系统APP(程序+LW+部署)
  17. Fortran编程(VScode配置)——笔记2
  18. maya中redshift渲染深度景深后nuke合成方法
  19. iOS虚拟支付被封,6个技巧帮你快速解决烦恼
  20. 解释X_train,Y_train,X_test,Y_test分别表示什么

热门文章

  1. 支持M1芯片Mac电脑的 Adobe Photoshop 2021 for Mac 中文版本
  2. 电脑突然关机重启是什么原因?
  3. 【转载】周易大象传原文及译文
  4. linux中如何查看mac地址
  5. C语言题目(数组)1
  6. 微信h5页面禁止下拉方法
  7. Js之$.ajax回调函数获取结果的问题-yellowcong
  8. 区块链公司依靠电信主网颠覆汇款行业
  9. 计算机屏幕上怎么会有条竖杠,电脑屏幕出现一条竖线
  10. 匿名飞控码STM32版代码整理之Ano_AttCtrl.c