前端数据拷贝(浅拷贝、深拷贝)

浅拷贝

1 直接赋值

2 扩展运算符(...)

3 abject.assign()

Object.assign({}, obj);

4 slice和concat

slice 截取数组

concat 拼接数组

深拷贝

1 JSON.parse(JSON.stringify(待拷贝对象))

2 使用第三方库 Lodash

javascript 复制代码
const _ = require('lodash');

let obj = {
    name: 'demo',
    age: 26
}

let obj2 = _.cloneDeep(obj);
obj2.name = "demo_new";

console.log(obj); // {name: "demo", age: 26}
console.log(obj2); // {name: "demo_new", age: 26}

3 手写一个深拷贝

javascript 复制代码
function deepClone (obj) {
    if (typeof obj !== 'object' || obj == null) {
        return obj;
    }
    
    let deepCloneObj = Array.isArray(obj) ? [] : {}
    
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            deepCloneObj[key] = deepClone(obj[key]);
        }
    }
    
    return deepCloneObj;
}
相关推荐
IT_陈寒几秒前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
前端snow23 分钟前
ai agent --- 多agent框架之图编排引擎-langgraph
前端
竹林81826 分钟前
OmniPic Studio v3.2.1 核心技术架构与全平台发版解析文档
前端·浏览器
JamesZhang8007826 分钟前
页面内存只涨不跌? 一次泄漏排查, 牵出 WeakMap 的诞生
前端
Z小明30 分钟前
第 6 章 组件进阶
前端·vue.js
江华森32 分钟前
HTTP请求的完整过程详解:从DNS解析到TCP挥手的微秒级实战分析
前端
南青33 分钟前
Vue 3 中后台实战:我踩过的 10 个坑和最佳实践
前端
江华森35 分钟前
HTTPS协议详解——SSL/TLS握手、证书与加密通信
前端
江华森41 分钟前
从一个HTTP请求看网络分层原理:基于华为云ECS的真实抓包实战
前端
江华森43 分钟前
TCP协议详解——三次握手、四次挥手与连接状态
前端