美文网首页
JS赋值、浅拷贝与深拷贝

JS赋值、浅拷贝与深拷贝

作者: 苹果咏 | 来源:发表于2019-10-06 20:19 被阅读0次

赋值

基本数据类型赋值,赋值之后两个变量互不影响

    var dd = 89
    var tt = dd
    tt = 90
    console.log(dd);//89
    console.log(tt);//90

对引用类型进行赋址,两个变量指向同一个对象,改变变量 a 之后会影响变量 b,哪怕改变的只是对象 a 中的基本类型数据。

    var obj = {
            id: 1,
            name: 'andy',
            msg: {
                age: 18
            }
        };
    var o = {};
    o = obj
    o.msg.age = 8
    console.log(o);
    console.log(obj);//里面msg.age都是8

浅拷贝

浅拷贝只拷贝最外一层

  var obj = {
            id: 1,
            name: 'andy',
            msg: {
                age: 18
            }
        };
    var o = {};

//浅拷贝只拷贝最外一层
        for (var k in obj) {
          // k 是属性名   obj[k] 属性值
             o[k] = obj[k];
        }
         console.log(o);
         o.msg.age = 20;
         console.log(obj);//第二层的数据会随着变化

        obj.name = "jj";
        console.log(o);
        console.log(obj);//最外层的数据不会随着变化

//ES6写法
Object.assign(o, obj);
console.log(o);
o.msg.age = 20;
console.log(obj);//里面的层还是会随着变化

深拷贝

深拷贝拷贝多层

    var obj = {
            id: 1,
            name: 'andy',
            msg: {
                age: 18
            },
            color: ['pink', 'red']
        };
    var o = {};

    function deepCopy(newobj, oldobj){
        for(i in oldobj){
            var item = oldobj[i]
            //判断是否为数组
            if(item instanceof Array){
                newobj[i] = []
                deepCopy(newobj[i], item) 
            //判断是否为对象
            }else if(item instanceof Object){
                newobj[i] = {}
                deepCopy(newobj[i], item)
            }else{
                //简单数据类型
                newobj[i] = item;
            }
        }
    }
    deepCopy(o, obj);
    console.log(o);
    o.msg.age = 20;
    console.log(obj);//不会相互影响

相关文章

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • JS赋值、浅拷贝与深拷贝

    赋值 基本数据类型赋值,赋值之后两个变量互不影响 对引用类型进行赋址,两个变量指向同一个对象,改变变量 a 之后会...

  • 简介深浅拷贝

    深浅拷贝 python 直接赋值,浅拷贝和深拷贝 直接赋值 其实就是对象的引用 (可以理解成浅拷贝) 浅拷贝: 拷...

  • JAVA设计模式:原型模式与拷贝

    深拷贝与浅拷贝 浅拷贝:对象A进行赋值操作得到对象B,这就是浅拷贝,修改对象A的属性会影响到B的属性 深拷贝:深拷...

  • JavaScript 深拷贝、浅拷贝和 Object.assig

    数组解构赋值的模式同样适用于任意迭代器:ES6 变量声明与赋值:值传递、浅拷贝与深拷贝详解 浅拷贝 浅拷贝是指复制...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • js深拷贝浅拷贝

    目录 一.数据类型 二.浅拷贝与深拷贝 三.赋值和浅拷贝的区别 四.浅拷贝的实现方式 五.深拷贝的实现方式 一.数...

  • js赋值,浅拷贝,深拷贝

    ..和原数据是否指向同一对象第一层数据类型为基本数据类型原数据中包含子对象赋值是改变会使原数据一同改变改变会使原数...

  • js赋值 浅拷贝 深拷贝

    https://blog.csdn.net/coder_chenz/article/details/8512508...

  • python的浅拷贝和深拷贝

    对于不可变类型,浅拷贝和深拷贝没有区别 对于不可变类型 赋值 浅拷贝 深拷贝

网友评论

      本文标题:JS赋值、浅拷贝与深拷贝

      本文链接:https://www.haomeiwen.com/subject/esgupctx.html