zoukankan      html  css  js  c++  java
  • 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;
    }
     
  • 相关阅读:
    设置开发环境
    安装开发软件
    学习路线
    预备知识
    Spring是什么
    yum安装nginx
    .net 哈希
    Excel文件处理Demo
    汉字处理组件
    Log4Net
  • 原文地址:https://www.cnblogs.com/mangoniki/p/5484930.html
Copyright © 2011-2022 走看看