分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

js实现深拷贝

发布时间:2023-09-06 02:20责任编辑:熊小新关键词:js

  js的数据类型分为基本数据类型和引用数据类型。基本数据类型是直接赋值,引用数据类型分为浅拷贝和深拷贝。浅拷贝是复制对象的指针,深拷贝是复制对象所有属性再内存中独立存在。

  浅拷贝如下:

var obj = {a: ‘test‘, b: {c: 0}}var obj1 = objvar obj2 = shallowCopy(obj);function shallowCopy(src) { ???var dst = {}; ????for (var prop in src) { ????????if (src.hasOwnProperty(prop)) { ????????????dst[prop] = src[prop]; ?????????} ?????} ????return dst;}var obj3 = Object.assign({}, obj)obj.a = ‘arr‘obj.b.c = 1console.log(obj) // {a: ‘arr‘, b: {c: 1}}console.log(obj1) // {a: ‘arr‘, b: {c: 1}}console.log(obj2) // {a: ‘test‘, b: {c: 1}}console.log(obj3) // {a: ‘test‘, b: {c: 1}}

  深拷贝实现如下:

function extend (source) { ?var target ?if (typeof source === ‘object‘) { ???target = Array.isArray(source) ? [] : {} ???for (var key in source) { ?????if (source.hasOwnProperty(key)) { ???????if (typeof source[key] !== ‘object‘) { ?????????target[key] = source[key] ???????} else { ?????????target[key] = extend(source[key]) ???????} ?????} ???} ?} else { ???target = source ?} ?return target}var obj1 = {a: {b: 0}}var cpObj1 = extend(obj1)obj1.a.b = 1console.log(cpObj1) // {a: {b: 0}}var obj2 = [[0]]var cpObj2 = extend(obj2) obj2[0][0] = 1console.log(cpObj2) // [[0]]

  

js实现深拷贝

原文地址:https://www.cnblogs.com/zjp-zxy/p/9870658.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved