关于前端拷贝

夙愿已清 提交于 2019-12-05 03:08:32

深拷贝

创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象

几种实现方式:

1.JSON.parse(JSON.stringify())

  • 用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝
  • 这种方法虽然可以实现数组或对象深拷贝,但不能处理函数

2 代码实现一个深拷贝

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
    </head>
    <body>
        <script>
            // 在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法.
            function dataType(value) {
              return Object.prototype.toString.call(value).slice(8, -1);
            }
            function clone(value) {
              let result, currentType  = dataType(value)
              if (currentType === 'Object') {
                result = {}
              } else if (currentType === 'Array') {
                result = []
              } else {
                return value
              }
              for (let i in value) {
                if (dataType(value[i]) === 'Object' || dataType(value[i]) === 'Array') {
                    result[i] = clone(value[i])
                } else {
                    result[i] = value[i]
                }
              }
              return result
            }
            var apple = {
                name: 'yang',
                list: {
                    id: [1, 2, 4],
                    color: 'red'
                }
            }
            var newApple = clone(apple)
        </script>
    </body>
</html>

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!