对象赋值给变量

问题:变量a和对象b。直接使变量a = b,改变a的值会使对象b本身跟着改变。

原因:变量a得到的是对象b的地址,a和b指向内存堆中同一个对象。

解决:

        ①:解构对象b再赋值给变量a

                  a = {...b}

        ②:JSON序列化

                  let a = JSON.parse(JSON.stringify(b))

                JSON.stringify() 把 json 对象转换成为 json 字符串
                JSON.parse() 把 json 字符串转换成为 json 对象

        ③:对象合并方法,复制对象的可枚举属性到目标对象。

                Object.assign(target, ...sources)

                target--->目标对象   source--->源对象

                Object.assign(a, b)

补充:Object.assign对象合并方法

eg:const target = { a: 1 };

const source1 = { b: 2 };

const source2 = { c: 3 };

Object.assign(target, source1, source2);

target // {a:1, b:2, c:3}

将源对象(source)的所有可枚举属性,复制到目标对象(target)。如果该参数不是对象,则会先转成对象。

Object.assign方法实行的是浅拷贝,而不是深拷贝。如果源对象某个属性的值是对象, 那么目标对象拷贝得到的是这个对象的引用。改变源对象会使复制的目标对象也改变, 而JSON序列化和解构不会。如果改变目标对象,三种方式都不会使源对象发生变化。

Eg:const obj1 = ref<any>({
    name:'yyy',
    age:'18'
})
const obj2 = ref<any>({
    hobby:'read books',
    sex:'girl',
})
Object.assign(data,obj1.value,obj2.value)  //合并obj1和obj2

//则 data:{ "name": :“yyy”,
"age": "18", 
"hobby": "read books",
 "sex": "girl" }

obj1.value.name = '改变obj1后的yyy'  //改变obj1


//则 data:{ "name": "改变obj1后的yyy", 
"age": "18", 
"hobby": "read books",
 "sex": "girl" }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值