递归深拷贝

//假设方法已经存在function clone( o ) {   var temp = {};//遍历对象,如果对象的属性还是一个对象,则继续使用该方法   for ( var k in o ) {      if ( typeof o[ k ] == ‘object‘ ) {         temp[ k ] = clone( o[ k ] );      } else {//如果不是引用类型,直接赋值         temp[ k ] = o[ k ];      }   }   return temp;}
时间: 2024-10-03 13:30:09

递归深拷贝的相关文章

递归 深拷贝

// 递归深拷贝! function clone(Obj) { var newObj; if (Obj instanceof Array) { newObj = []; // 创建一个空的数组 var i = Obj.length; while (i--) { newObj[i] = clone(Obj[i]); } return newObj; } else if (Obj instanceof Object){ newObj = {}; // 创建一个空对象 for (var k in Ob

javascript之闭包,递归,深拷贝

闭包 理解:a函数执行后return出b函数且b函数可以访问a函数的数据 好处:子函数存储在复函数内部,子函数执行完不会被自动销毁 坏处:占用内存比较大 ex: function bibao(){ var i=10; return function(){ console.log(i); return i++; } } var bibao_task=bibao(); bibao_task(); bibao_task(); bibao_task(); 递归 理解:子元素有子元素,子元素的子元素有子元

深入 js 深拷贝对象

前言 对象是 JS 中基本类型之一,而且和原型链.数组等知识息息相关.不管是面试中,还是实际开发中我们都会碰见深拷贝对象的问题. 顾名思义,深拷贝就是完完整整的将一个对象从内存中拷贝一份出来.所以无论用什么办法,必然绕不开开辟一块新的内存空间. 通常有下面两种方法实现深拷贝: 迭代递归法 序列化反序列化法 我们会基于一个测试用例对常用的实现方法进行测试并对比优劣: let test = { num: 0, str: '', boolean: true, unf: undefined, nul:

js对对象引用

var a = [1,2,3];var b = a; b.push(4); console.log(a);//[1,2,3,4]var a = [1,2,3];var b = a; b=[1,2,3,4];//改变了引用地址 console.log(a);//[1,2,3]// 浅拷贝var a = {};var b = {name:"hello"};function copy(obj){ var newObj = {}; for(var attr in obj){ newObj[at

ES6与ES5的继承

ES6 ES6中的类 类与ES5中的构造函数写法类似 区别在于属性要放入constructor中,静态方法和属性实列不会继承 <script> class Person{ height="178cm"; constructor(name,age){ //属性 this.name = name; this.age = age; } //方法 getName(){ console.log("姓名是:"+this.name); } //静态方法 static

vue项目常用方法封装,持续更新中。。。

vue项目中可以直接使用 1.常用工具类untils.js中 /* * 验证手机号是否合格 * true--说明合格 */ export function isPhone(phoneStr){ let myreg = /^[1][3,4,5,7,8,9][0-9]{9}$/; if (!myreg.test(phoneStr)) { return false; } else { return true; } } /* * 验证身份证号是否合格 * true--说明合格 */ export fun

利用递归实现深拷贝(常见面试题之一)

浅拷贝和深拷贝的区别: 浅拷贝 : 只是将数据中所有的数据引用下来,依旧指向同一个存放地址,拷贝之后的数据修改之后,也会影响到原数据的中的对象数据 深拷贝 : 将数据中所有的数据拷贝下来,对拷贝之后的数据进行修改不会影响到原数据 实现思路: 将要拷贝的数据 obj 以参数的形式传参 声明一个变量 来储存我们拷贝出来的内容 判断 obj 是否是引用类型数据,如果不是,则直接赋值即可( 可以利用 obj instanceof Type 来进行判断), 由于用 instanceof 判断array 是

JavaScript递归简单实现个对象深拷贝

JavaScript中对象的深拷贝来说一直都算比较恶心 毕竟没有什么api能直接全拷贝了 得自己便利写  最近在项目中需要深拷贝 自己简单封了个方法 话不多说 直接上码 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="widt

递归实现深拷贝

```var deepCopy = function(obj) { if (typeof obj !== 'object') return obj var newObj = (Object.prototype.toString.call(obj) === '[object Array]') ? [] : {} for (var key in obj) { if (obj.hasOwnProperty(key)) { newObj[key] = (typeof obj[key] !== 'obje