JavaScript的深浅拷贝--简写

拷贝的区别?

浅拷贝:只拷贝一层数据(简单数据类型)

深拷贝:拷贝所用的数据(包含复杂数据类型)

如何查看是否拷贝成功?

更改一个的属性或方法的值,看是否会有数据覆盖导致两个数据都改变。

、浅拷贝

浅拷贝方式:0.1  for...in 循环遍历拷贝;0.2 通过展开运算符拷;0.3 Object.assign(新,旧)。

0.1  for...in 循环遍历拷贝

let arr = {
        uname: '张三',
        age: 233,
        max: 987,
      }

      let ass = {}

     // 拷贝方式
      ass.uname = arr.uname
      for (let k in arr) {
        ass[k] = arr[k]
      }

// 输出语句
console.log(arr, ass)

 0.2 通过展开运算符拷;

let arr = {
        uname: '张三',
        age: 233,
        max: 987,
       }

//展开运算符,拷贝。注意:需要用{}包裹
 let ass ={...arr}

//输出语句

console.log(arr, ass)

0.3 Object.assign(新,旧)

let arr = {
        uname: '张三',
        age: 233,
        max: 987,
      }
      let ass = {}

// 拷贝方式
Object.assign(ass,arr )

//输出语句
console.log(arr, ass)

二,深拷贝

深拷贝方式:0.1 for..in循环遍历+条件判定;0.2 用JSON特性两次转换;0.3 londasn下载js插件。

0.1 for..in循环遍历+条件判定;

let arr = {
        uname: '唐三藏',
        max: 996,
        kkl: '洗澡',
        color: ['red', 'red', 'red', 'red', 'red', 'red'],
        gjrmd: {
          gjr1: '孙悟空',
          gjr2: '猪悟净',
          gjr3: '沙僧',
          gjr4: '小白龙',
        },
      }


let ass = {};
// 拷贝方式 封装函数
        function nanes(newObj, oldObj) {
          for (let k in oldObj) {
            // 1.1  先数组  
            if (oldObj[k] instanceof Array) {
              newObj[k] = []
              nanes(newObj[k], oldObj[k])
              // 1.2 处理对象
            } else if (oldObj[k] instanceof Object) {
              newObj[k] = {}
              nanes(newObj[k], oldObj[k])
              // 1.3 处理浅层
            } else {
              newObj[k] = oldObj[k]
            }
          }
        }

      nanes(ass, arr)
//输出语句
      console.log(ass, arr);

0.2 用JSON特性两次转换;

 let arr = {
        uname: '唐三藏',
        max: 996,
        kkl: '洗澡',
        color: ['red', 'red', 'red', 'red', 'red', 'red'],
        gjrmd: {
          gjr1: '孙悟空',
          gjr2: '猪悟净',
          gjr3: '沙僧',
          gjr4: '小白龙',
        },
      }

// 拷贝方式
let ass = JSON.parse(JSON.stringify(arr))

//输出
console.log(ass, arr)

0.3 londasn下载js插件

搜索  londasn 下载js文件,插入引用。

// 插入js文件
<script type="text/javascript" src="./lodash.min.js"></script>
<script>

    let arr = {
        uname: '唐三藏',
        max: 996,
        kkl: '洗澡',
        color: ['red', 'red', 'red', 'red', 'red', 'red'],
        gjrmd: {
          gjr1: '孙悟空',
          gjr2: '猪悟净',
          gjr3: '沙僧',
          gjr4: '小白龙',
        },
      }
// 引用深拷贝的js 
let ass = _.cloneDeep(arr)

//输出
console.log(ass, arr)


</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值