JS对象克隆

作者: 饥人谷_米弥轮 | 来源:发表于2017-11-14 00:04 被阅读9次
    • 原始数据类型(5种):undefined null number string boolean

    • 引用数据类型(1种):

      • 虽然引用数据类型只有1种,但是它可以将多种原始的数据存在一个单元中,这也就是为什么它被称为“复合数据类型”,也就是对象——Object。
    • 原始数据类型和引用数据类型的区别:

      • 首先咱们先来看下它的概念,概念如果看不太明白,没有关系,我会在之后举例。
      • 原始数据类型:在内存中,存放在栈中的简单数据段,也就是说,他们直接存储在变量访问的位置。
      • 引用数据类型:在内存中,存放在堆中的对象,就是说,存储在变量处的值是一个指针,指向存储对象的内存处。
    • 举例说明:

      • 原始数据类型就像一个文件,我们可以直接找到并打开的过程。
      • 引用数据类型就像一个文件的快捷方式,我们是通过快捷方式找到文件的位置,打开的过程。
    <script>
        function clone(obj) {
            var o
    
            if (obj instanceof Array) {
                o = []
                let len = obj.length
    
                whlie(len--) {
                    o[len] = clone(obj[len])
                }
                return o
    
            } else if (obj instanceof Object) {
                o = {}
    
                for (let key in obj) {
                    o[key] = clone(obj[key])
                }
                return o
    
            } else {
                return obj
            }
        }
    
        // 代码优化
        function clone2(obj) {
            let o = obj instanceof Array ? [] : {}
    
            for (let key in obj) {
                if (obj[key] instanceof Object) {   //判断对象中是否还有对象,有,继续递归
                    o[key] = clone2(obj[key])   
                } else {
                    o[key] = obj[key]   //只要不是对象就直接放进去
                }
            }
            return o
        }
    
        // 代码再优化
        function clone3(obj) {
            let o = obj instanceof Array ? [] : {}
    
            for (let key in obj) {
                o[key] = obj[key] instanceof Object ? clone3(obj[key]) : obj[key]
            }
        }
    </script>

    相关文章

      网友评论

        本文标题:JS对象克隆

        本文链接:https://www.haomeiwen.com/subject/qmotvxtx.html