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对象克隆

    原始数据类型(5种):undefined null number string boolean 引用数据类型(1种...

  • js对象深度克隆

    通用克隆方法 第一种方法简单粗暴,先将对象序列化再解析回来,不过要注意对象中如果有函数function则不能正确复...

  • js对象的克隆

    在工作中对对象的克隆在所难免,现在就总结一下克隆对象的方法。 浅克隆 深度克隆 其实除了以上的方法,还有一种非常简...

  • js与ES6对象常用方法区别

    js与ES6对象常用方法区别js中对象方法 Object.assign//用于克隆 Object.is()…用于判...

  • ES6时代,你真的会克隆对象吗?

    原文:你真的会克隆对象吗 开始之前 在开始聊克隆之前,我们还是先来看看js数据类型。js的数据类型分为基本数据类型...

  • js代码题

    js对象的深度克隆 js数组去重 js常用设计模式的实现思路,单例,工厂,代理,装饰,观察者模式等

  • 在JS中动态创建,删除,克隆元素

    在JS中动态创建,删除,克隆元素 createElement创建元素 createTextNode创建文本对象 a...

  • PHP中对象的复制

    潜克隆(浅拷贝) 只能克隆对象的"非对象非资源"数据。但如果对象中属性存储的是对象类型,就可以看到克隆没有克隆对象...

  • 对象的克隆

    对象的克隆 对象地址的引用: 以上属于对象地址的引用: 一、对象的浅克隆 Person: Demo: 对象浅克隆要...

  • js公共函数总结

    字节大小转换 Object 对象的深度克隆(深拷贝) 时间格式化 js利用空对象作为中介实现继承 需求:get请求...

网友评论

    本文标题:JS对象克隆

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