js对象深拷贝

原创 2017年10月11日 19:00:49

前置知识

基本类型和引用类型

  基本类型:存放在栈内存中的简单数据段,数据大小确定,内存空间大小可以分配。

  5种基本数据类型有Undefined、Null、Boolean、Number 和 String,它们是直接按值存放的,所以可以直接访问。

  引用类型:存放在堆内存中的对象,变量实际保存的是一个指针,这个指针指向另一个位置。每个空间大小不一样,要根据情况开进行特定的分配。

  当我们需要访问引用类型(如对象,数组,函数等)的值时,首先从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据。

浅拷贝 若是引用类型则拷贝的是一个引用地址

var newObj = obj;

这里写图片描述

实现深拷贝的方式

1 JSON转换

var newObj = JSON.parse(JSON.stringify(obj));

这里写图片描述

2 递归解析

function copyObject(obj){
  var newObj = obj.constructor === Array?[]:{};
  for(var i in obj){
    if(typeof obj[i] === 'object'){
      newObj[i] = arguments.callee(obj[i]);
    }
    else{
      newObj[i]=obj[i];
    }
  }
  return newObj;
}
function copyAll(type){
  var o;
  if(typeof type === 'object'){
    o = copyObject(type);
  }else{
    o = type;
  }
  return o;
}

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

JS中深拷贝数组、对象、对象数组方法

我们在JS程序中需要进行频繁的变量赋值运算,对于字符串、布尔值等可直接使用赋值运算符 “=” 即可,但是对于数组、对象、对象数组的拷贝,我们需要理解更多的内容。 首先,我们需要了解JS的浅拷贝与深拷...
  • wodeai1235
  • wodeai1235
  • 2017年03月10日 09:59
  • 2017

javascript中的浅拷贝和深拷贝

1.js对象浅拷贝简单的赋值就是浅拷贝。因为对象和数组在赋值的时候都是引用传递。赋值的时候只是传递一个指针。看下面的实例代码:var a = [1,2,3]; var b =a ; var test ...
  • yisuowushinian
  • yisuowushinian
  • 2015年05月07日 15:29
  • 12737

javascript---对象和函数的引用、浅拷贝、深拷贝、递归

javascript---对象和函数的引用、浅拷贝、深拷贝、递归等相关问题!
  • zz410675629
  • zz410675629
  • 2014年04月19日 16:47
  • 2617

js对象、数字深拷贝方式(转)

知识点一:js中的对象谈到对象的拷贝,必定要说一下对象的概念。js中的数据类型分为两大类:原始类型和对象类型。(1)原始类型包括:数值、字符串、布尔值、null、undefined(后两个是特殊的原始...
  • xinghuo0007
  • xinghuo0007
  • 2017年07月01日 15:28
  • 144

分享2个功能的js代码(去掉数组里重复的项、数组或对象深拷贝)

功能1:如何去掉数组里重复的项? 测试  http://blog.csdn.net/lfcss/article/details/50261337  的代码如下: var arr = [2,1,2,1...
  • eagle_88
  • eagle_88
  • 2016年08月11日 22:07
  • 1131

JS中深拷贝数组、对象、对象数组方法

我们在JS程序中需要进行频繁的变量赋值运算,对于字符串、布尔值等可直接使用赋值运算符 “=” 即可,但是对于数组、对象、对象数组的拷贝,我们需要理解更多的内容。 首先,我们需要了解JS的浅拷贝与深拷...
  • wodeai1235
  • wodeai1235
  • 2017年03月10日 09:59
  • 2017

JS中深拷贝数组、对象、对象数组方法

我们在JS程序中需要进行频繁的变量赋值运算,对于字符串、布尔值等可直接使用赋值运算符 “=” 即可,但是对于数组、对象、对象数组的拷贝,我们需要理解更多的内容。 首先,我们需要了解JS的浅拷贝与深拷...
  • xiaohai1232
  • xiaohai1232
  • 2017年03月08日 10:55
  • 83

js对象的深拷贝和浅拷贝

为啥要用深拷贝?在很多情况下,我们都需要给变量赋值,给内存地址赋值,但是在赋引用类型值的时候,只是共享同一个内存区域,导致赋值的时候,还跟之前的值保持一致性。看一个具体的例子// 给test赋值了一个...
  • shuidinaozhongyan
  • shuidinaozhongyan
  • 2017年08月05日 11:06
  • 167

js对象浅拷贝和深拷贝详解

1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象。 下面这个函数,就是在做拷贝: var Chinese = {   nation:'中国' } var Doctor = {   career...
  • function__
  • function__
  • 2017年06月06日 11:05
  • 468

js 对象浅拷贝、深拷贝

对于对象这种内存占用比较大的来说,直接让复制的东西等于要复制的,那么就会发生引用,因为这种复制,只是将复制出来的东西的指向指向了要复制的那个东西,简单的说,就是两个都同时指向了一个空间,如果改变其中一...
  • qq_30438579
  • qq_30438579
  • 2017年11月01日 20:44
  • 75
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:js对象深拷贝
举报原因:
原因补充:

(最多只允许输入30个字)