JS 原始值和引用值区别,以及深浅拷贝

含义

原始值就是最简单的数据,引用值就是由多个值构成的对象

原始值 (复制值)

  1. null
  2. undefined
  3. Number
  4. String
  5. Boolean
    当我们把这些初始值赋给了变量的时候, 我们 复制了值.
var a = 5;
var b = a;
a = 10;
console.log(a); // 10
console.log(b); // 5   没有变化

引用值 (复制引用)

  1. Object
  2. Array
  3. Function
var obj1 = {a: 1}  //引用值
var obj2 = obj1 
obj2.a = 2
console.log(obj1) // {a: 2}  obj1跟着变化了

解析: obj2复制引用了obj1 ,只是指向了那个obj1的地址,所以我们更新这个地址的内容的时候,obj1 和 obj2 有着相同的值

深拷贝和浅拷贝

当我们的需求是对象的复制非引用时候,深拷贝和浅拷贝就用上了

当user中都是基础的数据类型的时候 ----浅拷贝
let user = {
    name: "lwb",
    age: 18
};
 
let cloneUser = Object.assign({}, user);
cloneUser.name="wst"
console.log(user.name); //lwb
console.log(cloneUser.name); //wst
当数据结构比较复杂的时候 ---- 深拷贝

浅拷贝还是解决不了

let user = {
    name: "lwb",
    age: 18,
    baby:{
        baby1:'旺旺',
        baby2:'多多'
    },
    arr:["1","2","3"]
};
let cloneUser = Object.assign({},user)
console.log(user);
console.log(cloneUser);  //这个时候输出,看不出有什么区别,两者输出一样

//此时我们从cloneUser修改baby中的小芳,看看有啥变化
cloneUser.baby.baby1="旺财";
cloneUser.arr[0]="6666";
console.log(user);
console.log(cloneUser); //这个时候,无论是user还是cloneUser中的baby2都变成了“旺财”,arr中也变成了6666

深拷贝解决需求

let user = {
    name: "lwb",
    age: 18,
    baby:{
        baby1:'旺旺',
        baby2:'多多'
    },
    arr:["1","2","3"]
};
let cloneUser = JSON.parse(JSON.stringify(user))
 
 当某一个对象修改值得时候,就不会影响到另外一个对象了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值