对 JavaScript 中的 5 种主要的数据类型(包括 Number、String、Object、Array、Boolean)进行值复制

这篇博客主要讨论了JavaScript中实现对象深拷贝的三种方法:分别为扩展Object.prototype.clone方法,使用递归函数以及判断类型的方式进行拷贝。每种方法都通过示例代码进行了详细解释,并分别进行了实例测试,展示了不同拷贝方式的效果和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
*测试数据
*/ 
const num = 123
const str = 'we'
const arr = [12,34,56]
const obj = {
  a: 1,
  b: true,
  c: {
    d: 'li'
  }
}
const bo = true

/**
*写法1
*/ 
Object.prototype.clone = function() {
  // 数值型:字符串、数字、布尔值
  if (this instanceof String || this instanceof Number || this instanceof Boolean) {
    return this
  }
  // 引用型
  const o = this.constructor === Array ? [] : {}
  for (var e in this) {
    if (e !== 'clone') {
      o[e] = typeof this[e] === 'object' ? this[e].clone() : this[e]
    }
  }
  return o
}
const num1 = num.clone()
console.log(num1)
const str1 = str.clone()
console.log(str1)
const arr1 = arr.clone()
console.log(arr1)
const obj1 = obj.clone()
console.log(obj1)
const bo1 = bo.clone()
console.log(bo1)

/**
*写法2
*/ 
function clone(arg) {
  // 数值类型
  if (['number', 'string', 'booblean'].includes(typeof arg)) {
    return arg
  }
  // 引用类型
  const o = arg instanceof Array ? [] : {}
  for (let key in arg) {
    o[key] = typeof arg[key] === 'object' ? clone(arg[key]) : arg[key]
  }
  return o
}
console.log(clone(num))
console.log(clone(str))
console.log(clone(arr))
console.log(clone(obj))
console.log(clone(bo))

/**
*写法3
*/ 
function clone1(arg) {
  if (arg instanceof Array) {
    const arr = []
    let i = arg.length
    while (i--) {
      arr[i] = clone1(arg[i])
    }
    return arr
  } else if (arg instanceof Object) {
    const o = {}
    for (let key in arg) {
      // console.log(key, arg[key] instanceof Function, '=====000')
      if (arg[key] instanceof Function) { // 此处加这个判断是因为写法一中给Object的原型加上了clone方法,需要剔除掉,不然会报错
        continue
      } else {
        o[key] = clone1(arg[key])
      }      
    }
    return o
  } else {
    return arg
  }
}

console.log(clone1(arr))
console.log(clone1(num))
console.log(clone1(str))
console.log(clone1(bo))
console.log(clone1(obj))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值