浅拷贝2(JSON.parse(JSON.stringify()))

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <!-- 博客地址:https://zhuanlan.zhihu.com/p/344258167 -->
    <script>
      var obj1 = {
        name: 'laowang',
        age: 18,
        hobby: ['唱', '跳', 'rap'],
        // 一般来说,JOSN.parse(JSON.stringify(obj1))只能对基本数据类型+obj+array进行深拷贝。
        // 不能对函数进行深拷贝,因为会忽略函数的拷贝。解决办法是进行递归操作。
        do: function () {
          console.log('我能做饭,也能吃饭')
        },
      }

      // JSON对象转JSON字符串(函数不能被转换)
      var obj1Str = JSON.stringify(obj1)
      console.log(obj1Str) // '{"name":"laowang","age":18,"hobby":["唱","跳","rap"]}'

      // JSON字符串转JSON对象
      var obj2 = JSON.parse(obj1Str)
      console.log(obj2) // {name: 'laowang', age: 18, hobby: Array(3)}

      // obj2中没有函数的拷贝(也就是说,obj2中是没有do方法的)
      console.log(obj1, obj2) // {name: 'laowang', age: 18, hobby: Array(3), do: ƒ} {name: 'laowang', age: 18, hobby: Array(3)}

      console.log(obj1 === obj2) // false
      console.log(obj1.hobby === obj2.hobby) // false
    </script>
  </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值