js 實現物件深拷貝
阿新 • • 發佈:2021-07-14
/** * 深拷貝 * @param {*} obj 需拷貝的物件 * @returns 深拷貝後的物件 */ function copyObj (obj) { // 對於原始型別和常見的非值,直接返回原來值 if ([NaN, null].includes(obj)) return obj if (['number', 'string', 'boolean', 'null', 'undefined', 'function', 'symbol'].includes(typeof obj)) { return obj } const objCopy = Array.isArray(obj) ? [] : {}嘴角上揚,記得微笑for (const key in obj) { objCopy[key] = typeof obj[key] === 'object' ? copyObj(obj[key]) : obj[key] } return objCopy } var obj1 = { name: 'zhangsan', age: 18, details: { like: ['打籃球', '唱歌'], sex: 1, tags: [18, 23] } } var r1 = copyObj(NaN) // NaN console.log(r1) var r1 = copyObj(null) console.log(r1) // NaN var r1 = copyObj(1) console.log(r1) // NaN var r1 = copyObj('test') console.log(r1) // 'test' var r1 = copyObj(true) console.log(r1) // true var r1 = copyObj(undefined) console.log(r1) // undefined var r1 = copyObj(() => { }) console.log(r1) // () => { } var obj2 = copyObj(obj1) console.log('obj2', obj2, `obj1 是否等於 obj2, ${obj1 === obj2}`)