js -深浅拷贝

简介: 针对引用类型而言,浅拷贝指的是复制对象的引用,即直接给引用类型赋值,如果拷贝后的对象发生变化,原对象也会发生变化。而深拷贝是真正地对对象进行拷贝,修改拷贝后的新对象并不会对原对象产生任何影响。

深浅拷贝

针对引用类型而言,浅拷贝指的是复制对象的引用,即直接给引用类型赋值,如果拷贝后的对象发生变化,原对象也会发生变化。而深拷贝是真正地对对象进行拷贝,修改拷贝后的新对象并不会对原对象产生任何影响。

在JS中数据类型分为基本类型和引用类型 基本类型: number, boolean,string,symbol,undefined,null

引用类型:object 以及一些标准内置对象 Array、RegExp、String、Map、Set..

基本类型数据拷贝

基本类型数据都是值类型,存储在栈内存中,每次赋值都是一次复制的过程

var a = 12;
var b = a;
console.log(a,b); //12  12
a = 13;
console.log(a,b); //13  12

引用类型数据拷贝

只拷贝对象的一层数据,再深处层次的引用类型value将只会拷贝引用

浅拷贝

let obj = {
   
    a : 1,
    b : {
   
        c : 2,
        d : {
   
            f : 3
        }
    }
}
let newObj = {
   ... obj};
console.log(newObj);
obj.b.c = 10;
console.log(newObj);
function cloneObj(obj){
   
    let clone = {
   };
    for(let key in obj){
   
        clone[key] = obj[key];
    }
    return clone;
}
let a = {
   
    x : {
   
        y : 1
    }
}
let b = cloneObj(a);
console.log(a,b);

深拷贝

深拷贝就不会像浅拷贝那样只拷贝一层,而是有多少层我就拷贝多少层,要真正的做到全部内容都放在自己新开辟的内存里。可以利用递归思想实现深拷贝。

function cloneObj(obj) {
   
    let clone = {
   };
    for (let i in obj) {
   
        // 如果为对象则递归更进一层去拷贝
        if (typeof obj[i] == "object" && obj[i] != null) {
   
            clone[i] = cloneObj(obj[i]);
        } else {
   
            clone[i] = obj[i];
        }
    }
    return clone;
}
相关文章
|
3月前
|
JSON JavaScript 数据格式
手写JS实现深拷贝函数
本文介绍了如何实现一个深拷贝函数`deepClone`,该函数可以处理对象和数组的深拷贝,确保拷贝后的对象与原始对象在内存中互不干扰。通过递归处理对象的键值对和数组的元素,实现了深度复制,同时保留了函数类型的值和基础类型的值。
23 3
|
3月前
|
JSON JavaScript 前端开发
js原型继承|26
js原型继承|26
|
4月前
|
JSON JavaScript 安全
JS深浅拷贝
本文介绍了JavaScript中实现数据拷贝的四种方法:`Object.assign()`, 扩展运算符(`...`), `JSON.parse(JSON.stringify())` 和递归深拷贝。`Object.assign()`及扩展运算符对基本数据类型进行深拷贝,而对引用类型则进行浅拷贝。`JSON.parse(JSON.stringify())`对所有类型的数据都执行深拷贝,但存在一些限制如日期类型被转为字符串等。递归深拷贝则避免了这些问题,并支持循环引用,是一种更安全的选择。
JS深浅拷贝
|
7月前
|
存储 JavaScript 前端开发
js深浅拷贝的区别
js深浅拷贝的区别
40 0
|
JavaScript
js中数组的深拷贝的方法
js中数组的深拷贝的方法
137 1
|
JavaScript 前端开发
js深浅贝和浅拷贝区别
js深浅贝和浅拷贝区别
|
存储 JavaScript 前端开发
js深拷贝
了解并掌握js深拷贝
js深拷贝
|
JavaScript
js 对象比较
js 对象比较
51 0
|
JavaScript
js lodash对象深拷贝
js lodash对象深拷贝
134 0
|
JavaScript
js 通过lodash拷贝对象
js 通过lodash拷贝对象
103 0