js深度克隆对象

js深度克隆对象简单的记录一下,如下代码:

var obj = {
  typeOf: function(obj) {
    const toString = Object.prototype.toString;
    const map = {
      ‘[object Boolean]‘: ‘boolean‘,
      ‘[object Number]‘: ‘number‘,
      ‘[object String]‘: ‘string‘,
      ‘[object Function]‘: ‘function‘,
      ‘[object Array]‘: ‘array‘,
      ‘[object Date]‘: ‘date‘,
      ‘[object RegExp]‘: ‘regExp‘,
      ‘[object Undefined]‘: ‘undefined‘,
      ‘[object Null]‘: ‘null‘,
      ‘[object Object]‘: ‘object‘
    };
    return map[toString.call(obj)];
  },
  deepCopy(data) {
    const t = this.typeOf(data);
    let o,
      i;
    if (t === ‘array‘) {
      o = [];
    } else if (t === ‘object‘) {
      o = {};
    } else {
      return data;
    }
    if (t === ‘array‘) {
      for (let i = 0; i < data.length; i++) {
        o.push(this.deepCopy(data[i]));
      }
    } else if (t === ‘object‘) {
      for (i in data) {
        o[i] = this.deepCopy(data[i]);
      }
    }
    return o;
  }
};

原文地址:https://www.cnblogs.com/tugenhua0707/p/9275965.html

时间: 2024-08-25 19:31:59

js深度克隆对象的相关文章

Js深度克隆解析

Js克隆(clone),就是数据拷贝,包括基础类型的数据和引用类型的数据,而深度克隆(deepClone)就是针对引用类型,如数组和对象. 两种拷贝的区别在于:浅拷贝时,拷贝出的对象指向原对象的地址,当其值发生改变时,原对象的值也发生改变:        深度拷贝,拷贝出的对象指向一个新的地址,当其值发生改变时,原对象的值不受影响. 下面列出深度拷贝的代码及其详细注释: var obj = {//待拷贝的对象 name:"abc", age:"123", card:

js 深度克隆

js中赋值主要有两种赋值形式,一种是值引用,另一种是址引用(地址). 一般对象赋值的时候,都是地址引用,所以在修改新对象的时候,其实修改了在内存区地址上的值. 为了达到值引用的效果,所以有 深度克隆的概念.   ps:自己理解的,被误导了别怪我 实现方式一: function deepClone(origin, target) { var target = target || {}, toStr = Object.prototype.toString, arrStr = '[object Arr

深度克隆对象

有时,我们需要对一个对象进行复制,如下列要求: 1. 使用递归来实现一个深度克隆,可以复制一个目标对象,返回一个完整拷贝 2. 被复制的对象类型会被限制为数字.字符串.布尔.日期.数组.Object对象. <script> function isObject(obj){ if(Object.prototype.toString.call(obj)==='[object Array]' || Object.prototype.toString.call(obj)==='[object Objec

javascript深度克隆对象

/** * * @param obj * @returns {*} */ //深度克隆 function cloneObject(obj) { if (obj === null || typeof(obj) !== 'object' || 'isActiveClone' in obj) return obj; if (obj instanceof Date) var temp = new obj.constructor(); //or new Date(obj); else var temp =

ES6深度克隆对象

'use strict'; let obj = { name:'zpf', age:18, parent:{ name:'pc', age:20 } }; let obj2 = Object.assign({},obj); obj2.name = 'aaa'; console.log(obj);

JS的深度克隆,利用构造函数原型深度克隆

我爱撸码,撸码使我感到快乐!大家好,我是Counter.今天来写写,JS中的深度克隆,这个在笔面试中,考的还是比较多的,主要是对象与数组的赋值,如果直接赋值的话,那么得到的是对象或者数组在堆里的地址,那么原有的的数据修改的话,那么克隆的数据也会随着修改,这就是浅克隆,所以这边就要使用到枚举,然后再每一项赋值,这样就可以完成一份深度克隆,这样原对象里修改属性,如果你在这对象修改之前已经克隆的话,那么你这个克隆的对象,对象里的属性是不变,这就是深度克隆.话不多说了,直接上代码: // 假设要克隆的对

JavaScript实现对象的深度克隆【简洁】【分享】

JavaScript实现对象的深度克隆 代码实现如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>clone</title> 6 7 <script type="text/javascript"> 8 //对象深度克隆方法 9 10 11 ////

JS对象深度克隆

首先看一个例子: 1 var student = { 2 name:"yxz", 3 age:25 4 } 5 var newStudent = student; 6 newStudent.sex = "male"; 7 console.log(student); //{name:"yxz",age:25,sex:"male"} 由此可见,将一个对象通过简单的传递赋值传递给一个新的变量时,仅仅是给该对象增添了一个别名.所以,对

js学习随笔一:对象简单、深度克隆(复制)

javascript的一切实例都是对象,只是对象之间稍有不同,分为原始类型和合成类型.原始类型对象指的是字符串(String).数值(Number).布尔值(Boolean),合成类型对象指的是数组(Array).对象(Object).函数(Function). 既然对象分为这两类,他们之间的最大差别是复制克隆的差别.普通对象存储的是对象的实际数据,而引用对象存储的是对象的引用地址,而把对象的实际内容单独存放,因为引用对象通常比较庞大,这是数据开销和内存开销优化的手段.通常初学者很难理解这部分内