深拷贝
拷贝
2023-09-11 14:22:18 时间
function _type(value) { return Object.prototype.toString.call(value); } function _deepClone(obj) { // 如果是null直接返回null if (obj === null) return null; // 如果是基本数据值或者函数,也直接返回即可(函数无需克隆处理) if (typeof obj !== 'object') return obj; // 如果是正则 if (_type(obj) === '[object RegExp]') return new RegExp(obj); // 如果是日期格式的数据 if (_type(obj) === '[object Date]') return new Date(obj); // obj.constructor:找到的是所属类原型上的constructor,而原型上的constructor指向的是当前类本身 =>保证传递进来什么类型的值,我们最后创建的newObj也是对应类型的 // obj.constructor === > constructor ====> 类 let newObj = new obj.constructor; for (let key in obj) { if (!obj.hasOwnProperty(key)) break; // 如果某一项的值是引用值吗,我们还需要进一步迭代循环,把引用值中的每一项也进一步克隆 =>深度克隆 newObj[key] = _deepClone(obj[key]); } return newObj; } let arr1 = [10, 20, { name: 'zxw' }, /^\d+$/, function () {}]; let arr2 = _deepClone(arr1); console.log(arr2); let obj1 = { name: 'zxw', ke: ['node', 'vue', 'react'], teacher: { n: 'jack', m: 'mike' } }; let obj2 = _deepClone(obj1); console.log(obj2);
Object.prototype.toString.call(value) 可以用来 判断数据类型 链接: https://www.cnblogs.com/cn-chy-com/p/11524980.html
相关文章
- 【C/C++学院】(6)构造函数/析构函数/拷贝构造函数/深copy浅copy
- 说说JS中的浅拷贝与深拷贝
- 编写高质量代码改善C#程序的157个建议[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]
- 在手机中精妙的进行文字的拷贝粘贴
- Prototype 原型模式 复制 浅拷贝 clone [MD]
- 【学习总结】Python-直接赋值、浅拷贝和深度拷贝解析
- 小技巧:如何突破某些网站只能登陆后才能进行文字拷贝的限制
- java - jsckson - 深拷贝时 java 8 LocalDateTime 报错解决
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
- memcpy in place 数组内拷贝
- kubectl cp 从k8s pod 中 拷贝 文件到本地
- C++逆向分析——对象拷贝
- 不要轻视拷贝构造函数与赋值函数
- C++类构造函数、拷贝构造函数、复制构造函数、复制构造函数、构造函数显示调用和隐式调用
- 验证基础-类型转换、虚方法、回调函数、对象拷贝
- 【C++要笑着学】深浅拷贝 | string 模拟实现 | 传统写法与现代写法