function deepClone(targetObject) {
if (typeof targetObject !== 'object') return targetObject;
if (targetObject === null) return null;
if (targetObject instanceof Date) return new Date(targetObject);
if (targetObject instanceof RegExp) return new RegExp(targetObject);
let newObj = new targetObject.constructor();
for(let key in targetObject) {
newObj[key] = typeof targetObject[key] === 'object' ? deepClone(targetObject[key]) : targetObject[key];
}
return newObj;
}
複製程式碼
附件:javascript 判斷各種資料型別
typeof 2 //輸出 number
typeof null //輸出 object
typeof {} //輸出 object
typeof [] //輸出 object
typeof (function(){}) //輸出 function
typeof undefined // 輸出 undefined
typeof '222' // 輸出 string
typeof true // 輸出 boolean
複製程式碼
看到這裡你肯定會問了:我怎麼去區分物件,陣列和null呢?
Object.prototype.toString.call
var gettype=Object.prototype.toString
gettype.call('aaaa') //輸出 [object String]
gettype.call(2222) //輸出 [object Number]
gettype.call(true) //輸出 [object Boolean]
gettype.call(undefined) //輸出 [object Undefined]
gettype.call(null) //輸出 [object Null]
gettype.call({}) //輸出 [object Object]
gettype.call([]) //輸出 [object Array]
gettype.call(function(){}) //輸出 [object Function]
複製程式碼