深拷贝和浅拷贝

一、先说数据类型,再谈深拷贝浅拷贝。

JavaScript中的数据类型分为基本数据类型和引用数据类型。
基本数据类型
即为值类型,字符串string,数值number,布尔值booleannull, undefined

1、占用空间固定,保存在中:当一个方法执行时,每个方法都会建立自己的内存栈,也就是所谓的函数作用域,基础变量的值是存储在栈区中的。
2、保存与复制的是值本身。
3、可以用typeof检测值类型

引用数据类型
即引用对象:Object(Array,Date,RegExp等)

1、引用类型变量存储在栈中的是指向堆中的数组或者对象的"地址",占用空间不固定,保存在中:由于对象的创建成本比较大,在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用,这个运行时数据区就是堆内存
2、保存与复制的是指向对象的一个指针。
3、使用instanceof()检测数据类型。
4、使用 new() 方法构造出的对象是引用型

二、深拷贝与浅拷贝
拷贝,就是赋值。
把一个变量赋给另外一个变量,就是把变量的内容进行拷贝。把一个对象的值赋给另外一个对象,就是把一个对象拷贝一份。

 let x=1;
    y=x;
    console.log(y);//y=1,此时将x的值赋值给y,x和y的值相等

    y=5;//此时改变y的值,x值不变
    console.log(y);//y=5
    console.log(x);//y=1
    //基本数据类型赋值,赋的是数据本身,没有深浅拷贝这一说。

引用数据类型的深拷贝与浅拷贝
1、浅拷贝:

let obj={
        name:'张三',
        age:'18'
    }
    

    let newObj=obj;
    newObj.name='李四';
    // 将obj的值赋值给newObj,并且更改了newObj的属性值,
    // 这时我们发现原来的obj的属性值name也发生了变化
    
    console.log(obj.name);//李四
    console.log(newObj.name);//李四
    // 引用类型赋值时,赋的值地址。
    // 这时只是把obj的地址拷贝了一份,赋值给newObj,并没有将数据拷贝一份。

2、深拷贝

  let obj={
        name:'张三',
        age:'18'
    }

    let newObj = JSON.parse(JSON.stringify(obj));
    newObj.name = '李四';
    // 将obj的值赋值给newObj,通过JSON.parse(JSON.stringify(obj))的方式,
    // 将地址和数据都进行拷贝,此时在去更改newObj的属性值,obj则不会发生变化;
    
    console.log(obj.name);//张三
    console.log(newObj.name);//李四
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值