• JavaScript 浅克隆与深度克隆


    一、浅克隆

     1、基本数据类型的克隆(赋值即可)

    var a = 1;
    var b = a;
    
    console.info(a); //1
    console.info(b); //1
    a = 2;
    console.info(a); //2
    console.info(b); //1

    把一个值赋给另一个变量时,当那个变量的值改变的时候,另一个值不会受到影响。

    2、数组克隆

     如果我们采取基本数据类型的方式(赋值)来进行克隆,案例如下:

    var arr1 = [1, 2, 3];
    var arr2 = arr1;
    console.info(arr1); //1,2,3
    console.info(arr2); //1,2,3
    arr1.push(4);
    console.info(arr1); //1,2,3,4
    console.info(arr2); //1,2,3,4

    因为arr2引用了arr1,他们指向了内存中的同一块地址,所以arr1的改变也会导致arr2的改变!那如果要实现数组的浅克隆要怎么操作呢?

    我们利用的数组的slice方法进行了克隆,代码如下:

    var arr1 = [1, 2, 3];
    var arr2 = arr1.slice();
    console.info(arr1); //1,2,3
    console.info(arr2); //1,2,3
    arr1.push(4);
    console.info(arr1); //1,2,3,4
    console.info(arr2); //1,2,3

    二、深度克隆 

    function clone(obj) {
        var o, i, j, k;
        if (typeof(obj) != "object" || obj === null) {
            return obj;
        }
        if (obj instanceof(Array)) {
            o = [];
            i = 0;
            j = obj.length;
            for (; i < j; i++) {
                if (typeof(obj[i]) == "object" && obj[i] != null) {
                    o[i] = arguments.callee(obj[i]);
                } else {
                    o[i] = obj[i];
                }
            }
        } else {
            o = {};
            for (i in obj) {
                if (typeof(obj[i]) == "object" && obj[i] != null) {
                    o[i] = arguments.callee(obj[i]);
                } else {
                    o[i] = obj[i];
                }
            }
        }
        return o;
    }
     
  • 相关阅读:
    改变字符串里面多个颜色
    悬浮按钮
    改变一串字体的多个颜色
    iOS上如何让按钮文本左对齐问题
    Swift中的willSet与didSet
    Swift语法之 ---- ?和!区别
    UIButton文字的显示位置,字体的大小
    javaweb要点复习 jsp和servlet
    常量指针和指针常量
    判断括号序列的合法性
  • 原文地址:https://www.cnblogs.com/mangoniki/p/5484930.html
Copyright © 2020-2023  润新知