码迷,mamicode.com
首页 > Web开发 > 详细

js 深度拷贝

时间:2018-05-15 19:47:28      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:array   code   gif   str   span   最简   number   存储方式   class   

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;
        }

 

js 深度拷贝

标签:array   code   gif   str   span   最简   number   存储方式   class   

原文地址:https://www.cnblogs.com/bruce-gou/p/9042315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!