分享web开发知识

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

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

js 深度拷贝

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

js 数据类型 分为2种:

  基本数据类型:Undefined、Null、Boolean、Number、String

  复杂数据类型:Object、Array、function

他们的区别是在内存中的存储方式:

  简单数据类型:在栈内直接存储值

  复杂数据类型:在栈内存储引用

 1. 在简单类型赋值的时候是赋的值, 如下 a 的值是不会被修改的 

 ???????var a = 1; ???????var b = a; ???????b = 2; ???????console.log(a);//1

 2. 复杂类型赋值的时候是赋的地址值,如下a对象下的a属性值会变成2,明明改变的是变量b,变量a却发生了变化,这就是因为赋的地址值,所以b发生变化,a也会受影响

 ???????var a = {a:1,b:2}; ???????var b = a; ???????b.a = 2; ???????console.log(a.a);//2

为了让复杂数据类型赋值的时候赋值,而不是赋地址值,就要进行深度拷贝,就是把对象的属性遍历一遍,赋给一个新的对象,数组也是一样的

js 深度拷贝只适用于复杂数据类型,数组对象,基本数据类型

1.最简单的貌似有弊端,没去看过。

var data = JSON.parse(JSON.stringify(obj));

2.

    function clone(data){ ???????????var obj; ???????????if(data instanceof Array){ ???????????????obj = []; ???????????????for(var i in data){ ???????????????????obj.push(clone(data[i])); ???????????????} ???????????}else if(data instanceof Object){ ???????????????obj = {} ???????????????for(var i in data){ ???????????????????obj[i] = clone(data[i]); ???????????????} ???????????}else{ ???????????????return data; ???????????} ???????????return obj; ???????}

js 深度拷贝

原文地址:https://www.cnblogs.com/bruce-gou/p/9042315.html

知识推荐

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