1. 程式人生 > 其它 >js 實現物件深拷貝

js 實現物件深拷貝

/**
 * 深拷貝
 * @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}`)
嘴角上揚,記得微笑