js 深度拷贝
js 数据类型 分为2种:
基本数据类型:Undefined、Null、Boolean、Number、String
复杂数据类型:Object、Array、function
他们的区别是在内存中的存储方式:
简单数据类型:在栈内直接存储值
复杂数据类型:在栈内存储引用
1. 在简单类型赋值的时候是赋的值, 如下 a 的值是不会被修改的
var a = ;
var b = a;
b = ;
console.log(a);//1
2. 复杂类型赋值的时候是赋的地址值,如下a对象下的a属性值会变成2,明明改变的是变量b,变量a却发生了变化,这就是因为赋的地址值,所以b发生变化,a也会受影响
var a = {a:,b:};
var b = a;
b.a = ;
console.log(a.a);//2
为了让复杂数据类型赋值的时候赋值,而不是赋地址值,就要进行深度拷贝,就是把对象的属性遍历一遍,赋给一个新的对象,数组也是一样的
js 深度拷贝只适用于复杂数据类型,数组对象,基本数据类型
1.最简单的貌似有弊端,没去看过。
var data = JSON.parse(JSON.stringify(obj));
2.
function clone(data){
var obj;
if(data instanceof Array){
obj = [];
for(var i in data){
obj.push(clone(data[i]));
}
}else if(data instanceof Object){
obj = {}
for(var i in data){
obj[i] = clone(data[i]);
}
}else{
return data;
}
return obj;
}
js 深度拷贝的更多相关文章
- JS 深度拷贝 Object Array
JS 深度拷贝 Object Array function cloneObj(o) { var isArray = o instanceof Array; var isObject = o insta ...
- js实现深度拷贝
js实现拷贝,使用普通赋值对象,在操作其中一个对象值的时候,另一个也会更改,不符合需求 因此引入深度拷贝,以下为实现深度拷贝的几种法: Object.assign // 合并多个对象 var targ ...
- js 数组的深度拷贝 的四种实现方法
首先声明本人资质尚浅,本文只用于个人总结.如有错误,欢迎指正.共同提高. --------------------------------------------------------------- ...
- javascript中对数组对象的深度拷贝
在前端开发的某些逻辑中,经常需要对现有的js对象创建副本,避免污染原始数据的情况. 如果是简单的一维数组对象,可以使用两个原生方法: 1.splice var arr1 = ['a', 'b', 'c ...
- Jquery的深度拷贝和深度克隆
有人问,拷贝和克隆不都是“复制”的意思吗. 这位看官问的好,一般情况下是一样的,但在jquery中却有些不同.jqurey深度拷贝一般只js对象的复制,是$.extend()方法,jquery深度克隆 ...
- c#:如何处理对对象进行深度拷贝
/// <summary> /// 对对象进行深度拷贝 /// </summary> /// <param name="obj"></pa ...
- lua实现深度拷贝table表
lua当变量作为函数的参数进行传递时,类似的也是boolean,string,number类型的变量进行值传递.而table,function,userdata类型的变量进行引用传递.故而当table ...
- C#深度拷贝和浅度拷贝方法
C#浅度拷贝多用于值类型的复制,即 int a=1;int b=a; 设置b=2后不会影响a的值. 但如果对于引用类型class a=new class(); class b=a; 设置b.name= ...
- 【转】Java如何克隆集合——深度拷贝ArrayList和HashSet
原文网址:http://blog.csdn.net/cool_sti/article/details/21658521 原英文链接:http://javarevisited.blogspot.hk/2 ...
随机推荐
- STL基础--流
流 介绍 // cout: 全局ostream对象,(typedef basic_ostream<char> ostream) // <<: ostream& ostr ...
- 使用mongo shell转换字符类型
MongoDB数据类型如下: 类型 对应数字 别名 说明 Double1 1 double String 2 string Object 3 object Array 4 array ...
- python "爬虫+有道词典"实现一个简单翻译程序
抓包软件使用的是Fiddler4 新版的查询接口 比较负责,引入了salt和sign http://fanyi.youdao.com/translate?smartresult=dict&sm ...
- PAT 乙级 1020 月饼 (25) C++版
1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食 ...
- PAT 乙级 1012 数字分类 (20) C++版
1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进 ...
- MySQL数据库解决乱码 latin1 转 gbk
latin1 也是一种编码,但是有时候它不适合我们正常的使用,所以我需要把它转成gbk编码. 查询数据库编码 show variables like 'character%'; 修改配置文件 my.i ...
- C# 读写 ini 配置文件
虽说 XML 文件越发流行,但精简的 ini 配置文件还是经常会用到,在此留个脚印. 当然,文中只是调用系统API,不会报错,如有必要,也可以直接以流形式读取 ini文件并解析. /// <su ...
- OpenStack存储(单节点)
一.OpenStack Swift对象存储 1.安装Swift服务 在controller节点依次执行iaas-install-swift-controller.sh和iaas-install-swi ...
- JS的正则表达式简介
1.JS的正则表达式 1.1 简介 JS的正则表达式比较简单,总体上只分为两个功能:一个是test——用于匹配字符串是否符合规定的正则表达式规则:另外一个是exec——用于获取匹配到的数据. 1.2 ...
- spark streaming检查点使用
import org.apache.spark._ import org.apache.spark.streaming._ /** * Created by code-pc on 16/3/14. * ...