Javascript 对象复制】的更多相关文章

在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针.引用.地址之类的,所以直接用"="就可以把一个对象复制给另外一个对象,如下代码: var i1 = 1; var i2 = i1; i2 = 2; alert("i1:"+i1+",i2:"+i2); 输出结果:i1:1 , i2:2 但可能没有发现,这种“复制”用在对象(object)类型是“错误”的,因为这只是把对象的地址复制…
近期项目因为怕数据污染所以用到了js的对象复制 js里的对象都是继承自object,是引用类型,所以无法通过=号复制 所以整理了一些常用的复制方法,如下 一.通过JSON序列化和反序列化创建新的对象 var obj = { a: 1, b: '2' }; var newObj = JSON.parse(JSON.stringify(obj)); 测试一下: obj.a = 3;//obj和newObj指向了不同的引用,所以newObj的b属性并不会变化 console.log(newObj);c…
如果对象只是一个数据集,可采用json化再反json化的方式克隆一个对象,这个过程会丢失对象的方法.效率比较低. 可以采用如下递归的方式复制一个对象. function clone(target) { var buf; if (target instanceof Array) { buf = []; //创建一个空的数组 var i = target.length; while (i--) { buf[i] = clone(target[i]); } return buf; }else if (…
一.数据类型分类: 基本变量 引用类型 二.什么叫做指针指向 栈内存.堆内存.指针指向(如下红圈圈的斜线). 三.赋值.拷贝.引用区别? 赋值指一个变量赋予某个值,包含两种方式,一种是直接量,另一种,是将另一个变量的值传递给这个变量.拷贝和引用都属于后者. 引用的目的是将指针指向相同堆内存中的某一位置. 拷贝的目的是改变指针的指向,并且内部属性或者元素的值相等.基础数据类型在赋值过程就改变了指针指向,所以通常说,基础类型的引用只存在只读状态.复杂数据类型的指针指向包含两种一种是指针指向栈内存,另…
<script> function copy(a) { ret = {}; for (sth in a) { temp = a[sth]; if (temp instanceof Array) { var ddddd = []; for (i in temp) { var b = copy(temp[i]); ddddd = ddddd.concat(b); } ret[sth] = ddddd; } else { ret[sth] = a[sth]; } } return ret; } co…
JavaScript中并没有直接提供对象复制(Object Clone)的方法.因此下面的代码中改变对象b的时候,也就改变了对象a. a = {k1:1, k2:2, k3:3}; b = a; b.k2 = 4; 如果只想改变b而保持a不变,就需要对对象a进行复制. 用jQuery进行对象复制   在可以使用jQuery的情况下,jQuery自带的extend方法可以用来实现对象的复制. a = {k1:1, k2:2, k3:3}; b = {}; $.extend(b,a);   自定义c…
前言 从层次上来看,对象的复制可以简单地分为浅复制和深复制,顾名思义,浅复制是指只复制一层对象的属性,不会复制对象中的对象的属性,对象的深复制会复制对象中层层嵌套的对象的属性. 在复制对象时,除了要复制对象的属性外,还要兼顾到是否保留了对象的constructor属性,是否对每一种数据类型(JavaScript常见的数据类型有String,Number,Boolean,Data,RegExp,Array,Funtion,Object)都实现正确的复制.项目中,我们可以根据实际情况,决定需要实现什…
前言 最近有人问我,如何将一个对象复制一份,因为他遇到了一个需求,需要将后端获取的数据,保存一份,原始数据会因为交互而发生变化,最终需要对比两份数据的异同. 他是一个刚入行的小朋友,他的实现方式就是新声明了一个变量,然后将数据赋值给了变量.本以为这就ok了,结果修改原数据,复制出来的变量中的内容,依然发生了变化. 在此,整理一下.(大中小)牛略过,仅为帮助新人,聊以解忧. 知识铺垫,值类型,与引用类型 我们用一个新的概念来理解这两种类型,连锁店和连锁店的钥匙. 1. 值类型包含如下:number…
目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符,而不能是字符串或者表达式,属性值可以是除undefined外的任何值.如果对象的属性值是函数,那么这个属性通常被称为方法.一般来说,对象可以通过直接量方式或者构造函数方式创建的,那么下面我用代码的方式更直观的展示对象的实现方式.(console.log在IE中无法工作,需要firefox或者Chr…
在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针.引用.地址之类的,所以直接用"="就可以把一个对象复制给另外一个对象,如下代码: var i1 = 1; var i2 = i1; i2 = 2; alert("i1:"+i1+",i2:"+i2); 输出结果:i1:1 , i2:2 但可能没有发现,这种“复制”用在对象(object)类型是“错误”的,因为这只是把对象的地址复制…