手写深拷贝

    function deepclone(obj){
        let result;
        switch(typeof obj){
            case 'undefined':
            break;
            case 'object':
                if (obj === null) {
                    result = null
                } else if (Object.prototype.toString.call(obj) === '[object Array]') {
                    result = []
                    obj.map(item => result.push(deepclone(item)))
                } else {
                    result = {};
                    for (var k in obj) {
                        result[k] = deepclone(obj[k])
                    }
                }
                break;
            default:
                result = obj;
                break
        }
        return result
    }
    arr = [
        {name: 'xiaoming', age: 18},
        false,
        18,
        null,
        undefined,
        [1, 2, 3, 4]
    ]
    let cloneArr = deepclone(arr);
    console.log(cloneArr);
    cloneArr[0].name = 'xiaohong';
    cloneArr[1] = 'xixixi';
    console.log(arr)
    console.log(cloneArr)

运行结果:


运行结果.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 方案1.序列化反序列化 上面的代码b就是a的深拷贝当我们修改b里面的值的时候,a的值不会跟着变化。 1.1.缺点 ...
    sweetBoy_9126阅读 449评论 0 1
  • 1. 简述深拷贝 JavaScript 中有2种变量类型:值类型(基本类型)和引用类型。深拷贝和浅拷贝都是针对引用...
    JaniceZD阅读 1,793评论 0 1
  • 手写深拷贝 深拷贝 深拷贝简单理解就是b是a的一份拷贝,且b中不存在a中对象的引用 深拷贝的实现 1.JSON序列...
    西域战神阅读 962评论 0 0
  • 很多面试都有手写深拷贝,道理都是懂面试的时候就是写不上来,所以找时间自己手写了一遍主要通过一个forEach函数遍...
    3f376d24cd44阅读 224评论 0 0
  • 什么是深拷贝? 简单理解:b是a的一份拷贝,b中没有对a中对象的引用。另一种理解:b是a的一份拷贝,把b和a各画出...
    littleyu阅读 171评论 0 0