zoukankan      html  css  js  c++  java
  • js 深度拷贝

    js 数据类型 分为2种:

      基本数据类型:Undefined、Null、Boolean、Number、String

      复杂数据类型:Object、Array、function

    他们的区别是在内存中的存储方式:

      简单数据类型:在栈内直接存储值

      复杂数据类型:在栈内存储引用

     1. 在简单类型赋值的时候是赋的值, 如下 a 的值是不会被修改的 

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

     2. 复杂类型赋值的时候是赋的地址值,如下a对象下的a属性值会变成2,明明改变的是变量b,变量a却发生了变化,这就是因为赋的地址值,所以b发生变化,a也会受影响

            var a = {a:1,b:2};
            var b = a;
            b.a = 2;
            console.log(a.a);//2

    为了让复杂数据类型赋值的时候赋值,而不是赋地址值,就要进行深度拷贝,就是把对象的属性遍历一遍,赋给一个新的对象,数组也是一样的

    js 深度拷贝只适用于复杂数据类型,数组对象,基本数据类型

    1.最简单的貌似有弊端,没去看过。

    var data = JSON.parse(JSON.stringify(obj));

    2.

        function clone(data){
                var obj;
                if(data instanceof Array){
                    obj = [];
                    for(var i in data){
                        obj.push(clone(data[i]));
                    }
                }else if(data instanceof Object){
                    obj = {}
                    for(var i in data){
                        obj[i] = clone(data[i]);
                    }
                }else{
                    return data;
                }
                return obj;
            }
  • 相关阅读:
    二次冲刺站立会议七
    二次冲刺站立会议六
    二次冲刺站立会议五
    二次冲刺站立会议四
    二次冲刺站立会议三
    二次冲刺站立会议二
    二次冲刺站立会议一
    Linux课程学习总结
    仿知乎专栏的软件系统设计方案
    仿知乎专栏的需求分析和概念原型
  • 原文地址:https://www.cnblogs.com/bruce-gou/p/9042315.html
Copyright © 2011-2022 走看看