1.下面的方法,是给Object的原型(prototype)添加深度复制方法(deep clone)。 1Object.prototype.clone =function() {2//Handle null or undefined or function3if(null==this|| "object" !=typeofthis)4returnthis;5//Handle the 3 simple types, Number and String and Boolean6if(thisinstanceofNumber ||th...
call(obj) } /** * 深克隆对象 * @param oldObj 源对象 * @returns {Object} 返回克隆后的对象 */ function deepClone(oldObj) { let newObj; if ( oldObj === null ) { return null } if ( typeof oldObj !== 'object') { return oldObj } switch (typeToString(oldObj)) { case TYPE_...
var toString = Object.prototype.toString; var map = { '[object Boolean]' : 'boolean', '[object Number]' : 'number', '[object String]' : 'string', '[object Function]' : 'function', '[object Array]' : 'array', '[object Date]' : 'date', '[object RegExp]' : 'regExp', '[...
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==='object'?myDeepClone(value):value})}else{// 浅拷贝一份...
'[object Null]' : 'null', '[object Object]' : 'object' }; return map[toString.call(obj)]; } 实现deepClone 对于非引用值类型的数值,直接赋值,而对于引用值类型(object)还需要再次遍历,递归赋值。 function deepClone(data) { var t = type(data), o, i, ni; ...
constcalendarEvent={title:'abc submit',date:newDate(123),attendees:["Steve",{name:'Steve'}]}constcopied=structuredClone(calendarEvent)copied.attendees.push('Zwan')copied.attendees[1].name='Zwan'console.log(calendarEvent,copied)/* { "title": "abc submit", ...
Object.defineProperty(Object.prototype, 'deepClone', {enumerable: false}); 在看控制台 同样上面方法中也是无法克隆一个不可枚举的属性。 完整代码如下 const deepClone = function(obj) { // 先检测是不是数组和Object // let isArr = Object.prototype.toString.call(obj) === '[object Array]'; ...
functiondeepClone(obj){if(obj===null||typeof obj!=='object'){returnobj;} let clone=obj.constructor();for(let attrinobj){if(obj.hasOwnProperty(attr)){ clone[attr]=this.deepClone(obj[attr]);} }returnclone;} 1. 2. 3. 4.
function deepClone(target, map = new WeakMap()) { if (isObject(target)) { let cloneTarget = Array.isArray(target) ? [] : {}; // 防止循环引用 if (map.get(target)) { return map.get(target); } map.set(target, cloneTarget); ...
{"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)) { ...