js对象深拷贝方法
JSON.stringify()是目前前端开发过程中最常用的深拷贝方式,
原理是把有个对象序列化成为一个 JSON 字符串,将对象的内容转换成字符串的形式再保存到磁盘上,
再用 JSON.parse()反序列化将 JSON 字符串变成一个新的对象
1 let obj1 = {
2 a: 1,
3 b: [1, 2, 3],
4 };
5
6 let str = JSON.stringify(obj1);
7 let obj2 = JSON.parse(str);
8 console.log(obj2); //{ a: 1, b: [ 1, 2, 3 ] }
9
10 //修改obj1
11 obj1.a = 2;
12 obj1.b.push(4);
13 console.log(obj1); //{ a: 2, b: [ 1, 2, 3, 4 ] }
14 console.log(obj2); //{ a: 1, b: [ 1, 2, 3 ] }
通过 JSON.stringify 实现深拷贝有几点要注意
- 拷贝的对象的值中如果有函数,undefined,symbol 则经过 JSON.stringify()序列化后的 JSON 字符串中这个键值对会消失
- 无法拷贝不可枚举的属性,无法拷贝对象的原型链
- 拷贝 Date 引用类型会变成字符串
- 拷贝 RegExp 引用类型会变成空对象
- 对象中含有 NaN、Infinity 和-Infinity,则序列化的结果会变成 null
- 无法拷贝对象的循环应用(即 obj[key] = obj)

学习记录
js对象深拷贝方法的更多相关文章
- js 对象 toJSON 方法
浅谈 js 对象 toJSON 方法 前些天在<浅谈 JSON.stringify 方法>说了他的正确使用姿势,今天来说下 toJSON 方法吧.其实我觉得这货跟 toString 一 ...
- js对象属性方法大总结(收集)
数组(Array):系列元素的有序集合: 详细演示请看:[js入门系列演示·数组 ] http://www.cnblogs.com/thcjp/archive/2006/08/04/467761.ht ...
- js 对象克隆方法总结(不改变原对象)
1.通用对象克隆: function clone(obj){ let temp = null; if(obj instanceof Array){ temp = obj.concat(); }else ...
- js对象深拷贝、浅拷贝
浅拷贝1 //浅拷贝1 let obj01 = { name: 'Lily', age: '20', time: ['13', '15'], person: { name: 'Henry', age: ...
- js对象属性方法大总结
数组(Array):系列元素的有序集合: 详细演示请看:[js入门系列演示·数组 ] http://www.cnblogs.com/thcjp/archive/2006/08/04/467761.ht ...
- js对象深拷贝
数组一维深拷贝:slice.concat.Array.from 对象一维深拷贝:Object.assign 一.利用扩展运算符...对数组中嵌套对象进行深拷贝 var arr=[{a:1,b:2},{ ...
- 使用js把json字符串转为js对象的方法
ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5)中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法. 1,eval方式解析,恐怕 ...
- js 对象toString()方法
({}+{}).length == 30; ({}).toString() '[object Object]' 当对象需要调用toString()方法时会被自动调用.
- 浅谈 js 对象 toJSON 方法
前些天在<浅谈 JSON.stringify 方法>说了他的正确使用姿势,今天来说下 toJSON 方法吧.其实我觉得这货跟 toString 一个道理,他是给 stringify 方法字 ...
- js对象属性方法
window对象方法方法: 1.alert():显示带有一段消息和确认按钮的警告框 2.prompt():显示可提示用户输入的对话框 3.fonfirm():显示带有一段消息以及确认按钮和取消按钮的对 ...
随机推荐
- 多个el-table在使用v-if在同一页面切换渲染时相互影响的解决办法
解决办法 给每个el-table设置一个唯一的key值,如: <el-table key='uniqueName' ></el-table> <el-table key= ...
- 【剑指Offer】【链表】反转链表
题目:输入一个链表,反转链表后,输出新链表的表头. A:定义3个结点,pNode作移动指针,pRet作输出指针,pPrev作前驱指针 在pNode没有到达链尾之前,循环里创建pNext指针记录p ...
- 物流扫码固定式扫描相机BXT-10M 自动分拣读码器 条码识别扫码器
物流扫码固定式扫描相机BXT-10M 自动分拣读码器 条码识别扫码器 VX : orihard2014 标签: 条码识别扫码器, 自动分拣读码器, 物流扫码固定式扫描相机, 物流扫码相机
- SQL中使用JOIN时,过滤条件的位置
sql语句 (SELECT * FROM t1 WHERE {subquery_where_condition}) a JOIN (SELECT * FROM t2 WHERE {subquery_w ...
- windows U盘启动装机工具(Ventoy)
Windows优盘启动装机工具 一.WePE 纯净 WePE 启动盘/ U盘重装系统工具 1.U盘重装系统工具下载地址:https://www.wepe.com.cn/download.html?td ...
- unity读取Excel表格保存到Sqlite数据库
1.读取Excel表格和保存sqlite数据库所用到的dll文件 下载链接:dll文件 最后如下图所示 废话不多说了,直接上代码吧 因为太长就折叠了 using System.Collection ...
- flask-基础篇01
一.介绍 flask只有一个内核,其WSGI工具箱采用Werkzeug(路由模块),模板引擎使用Jinja2.其他几乎所有功能都要用第三方扩展来实现. 二.常用扩展包 扩展列表:http://flas ...
- Android 系统完整的权限列表
访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.perm ...
- CCF 202012-2 期末预测之最佳阈值
#include <iostream> #include <bits/stdc++.h> #include <string> using namespace std ...
- 基于 Docker 安装 Nginx 搭建静态服务器
最近一直在准备家里的服务器部署一个自己用的网站玩玩,一来是用来学习部署的基础知识,二来,后面有空学点前端,可以部署到自己网站玩玩. 参考链接:https://juejin.cn/post/705740 ...