缺点是对复杂的对象(Buffer、Date 等实例对象)无法实现深拷贝 functionmyDeepClone(obj){letclone;// 排除非引用类型数据if(obj==null||typeofobj!='object')returnobj;if(Array.isArray(obj)){// obj 是数组clone=newobj.constructor(obj.length)obj.forEach((value,index)=>{clone[index]=typeofvalue===...
{"set": {},"map": {},"regex": {},"deep": {"array": [ {} ] },"error": {}, } 2. 使用递归 代码示例: functiondeepClone(obj) {if(obj ===null||typeofobj !== 'object') {returnobj; } let clone=obj.constructor();for(let attrinobj) {if(obj.hasOwnProperty(attr)) { clo...
Object 它是一系列属性的无序集合, 包括函数Function和数组Array 使用typeof是无法判断function和array的,这里使用Object.prototype.toString方法。 [默认情况下,每个对象都会从Object上继承到toString()方法,如果这个方法没有被这个对象自身或者更接近的上层原型上的同名方法覆盖(遮蔽),则调用该对象的toString()方法时会...
deep: { array: [ new File(someBlobData, 'file.txt') ] }, error: new Error('Hello!') } kitchenSink.circular = kitchenSink const clonedSink = structuredClone(kitchenSink) structuredClone可以做到: 拷贝无限嵌套的对象和数组 拷贝循环引用 拷贝各种各样的JavaScript类型,如Date、Set、Map、Error、Reg...
function deepClone(o) { // 判断如果不是引用类型,直接返回数据即可 if (typeof o === 'string' || typeof o === 'number' || typeof o === 'boolean' || typeof o === 'undefined') { return o } else if (Array.isArray(o)) { // 如果是数组,则定义一个新数组,完成...
实现deepClone 对于非引用值类型的数值,直接赋值,而对于引用值类型(object)还需要再次遍历,递归赋值。 function deepClone(data) { var t = type(data), o, i, ni; if(t === 'array') { o = []; }else if( t === 'object') { o = {}; ...
"deep": { "array": [ {} ] }, "error": {}, } 2. 使用递归 代码示例: function deepClone(obj) { if (obj === null || typeof obj !== 'object') { return obj; } let clone = obj.constructor(); for (let attr in obj) { ...
functiondeepClone(obj) {// 如果值 值类型 或 null ,直接返回if(typeofobj !=='object'|| obj ===null) {returnobj; }letcopy = {};// 如果对象是数组if(obj.constructor===Array) { copy = []; }// 遍历对象的每个属性for(letkinobj) {// 如果 key 是对象的自有属性if(obj.hasOwnProperty...
functiondeepClone(obj){//判断obj是否是数组let objClone = Array.isArray(obj)?[]:{};if(obj &&typeofobj==="object"){for(keyinobj){if(obj.hasOwnProperty(key)){//判断ojb子元素是否为对象,如果是,递归复制if(obj[key]&&typeofobj[key] ==="object"){ ...
function deepclone(target) { if (typeof target !== "object") return target; let obj; if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === "[object Array];"; }; } if (Array.isArray(target)) { ...