当前位置: 首页 > news >正文

深拷贝——JSON.stringify()序列化和JSON.prase()反序列化

为什么要使用深拷贝?

1、简单理解

JSON.parse() 和 JSON.stringify() 是 JavaScript 中用于处理 JSON 数据的两个内置方法

使用深拷贝的主要原因是为了创建一个对象或数组的完全独立副本,这样对副本的任何更改都不会影响到原始数据。

在 JavaScript 中,对象和数组都是引用类型。

数据分为基本数据类型 (String, Number, Boolean, Null, Undefined,Symbol) 和引用数据类型

基本数据类型的特点:直接存储在栈 (stack) 中的数据

引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里

引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。

 JSON.stringify() 并不是将对象和数组转换为基本数据类型,而是将它们转换为 JSON 字符串。这个过程涉及将对象和数组的结构及其包含的基本类型数据(如数字、字符串、布尔值等)序列化为一个文本格式,也就是 JSON 格式的字符串。

JSON.parse() 方法将这个 JSON 字符串反序列化回 JavaScript 对象或数组。由于字符串已经被转换过,JSON.parse() 创建的是一个全新的对象或数组,与原始对象或数组没有任何引用上的联系,因此可以视为一个独立的副本。

2、用法讲解

JSON.stringify()

JSON.stringify() 方法用于将一个 JavaScript 对象或数组转换成 JSON 字符串。它接受三个参数:

  1. value:要转换的 JavaScript 值(通常是对象或数组)。
  2. replacer:可选参数,用于替换或过滤掉某些属性。可以是一个函数或一个数组。
  3. space:可选参数,用于美化输出的 JSON 字符串。可以是一个数字或字符串,表示缩进的空格数。

JSON.parse()

JSON.parse() 方法用于将一个 JSON 字符串转换回 JavaScript 对象或数组。它接受两个参数:

  1. text:要解析的 JSON 字符串。
  2. reviver:可选参数,用于转换解析后的属性。通常是一个函数,可以用来修改或过滤属性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C语言】Top K问题【建小堆】
  • 浙大版《C语言程序设计(第3版)》题目集
  • JavaScript 继承百花齐放:从原型链到 ES6 类
  • 软设之TCP/IP协议
  • 软科中国大学排名爬虫+数据可视化
  • 图片管理组建
  • Flink 实时数仓(三)【DWD 层搭建(一)】
  • 《人性的枷锁:菲利普的人生探索能解开枷锁吗?》
  • 树套树模板
  • PYTHON专题-(5)类的专有方法
  • 每日学术速递8.3
  • Xilinx管脚验证流程及常见问题
  • conda环境pip 安装Tensorflow-gpu 2.10.2提示nbconvert 的包依赖冲突
  • OpenStack Yoga版安装笔记(十二)nova安装(下)
  • 林轩田机器学习基石——笔记1.2 Learn to Answer Yes/No(如何进行学习)
  • express + mock 让前后台并行开发
  • Flannel解读
  • github指令
  • JavaScript对象详解
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JWT究竟是什么呢?
  • Python中eval与exec的使用及区别
  • SAP云平台里Global Account和Sub Account的关系
  • SQLServer之创建显式事务
  • Webpack 4 学习01(基础配置)
  • 二维平面内的碰撞检测【一】
  • 近期前端发展计划
  • 使用权重正则化较少模型过拟合
  • 再次简单明了总结flex布局,一看就懂...
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # SpringBoot 如何让指定的Bean先加载
  • #APPINVENTOR学习记录
  • #pragma 指令
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $(selector).each()和$.each()的区别
  • $refs 、$nextTic、动态组件、name的使用
  • (1)SpringCloud 整合Python
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4)STL算法之比较
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (差分)胡桃爱原石
  • (第二周)效能测试
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (未解决)macOS matplotlib 中文是方框
  • (译)计算距离、方位和更多经纬度之间的点
  • .apk文件,IIS不支持下载解决
  • .NET BackgroundWorker
  • .Net(C#)自定义WinForm控件之小结篇
  • .netcore如何运行环境安装到Linux服务器
  • .NET文档生成工具ADB使用图文教程
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复