为了账号安全,请及时绑定邮箱和手机立即绑定

a={v:1}, b=a, b.v=3, b==a?

a={v:1}, b=a, b.v=3, b==a?

鸿蒙传说 2019-03-07 14:15:33
这个问题怎么取名我有点楞,是和内存有关吧(⊙o⊙)…var a = {v: 1}var b = ab.v = 2a.v == b.v  // true我希望在改变b.v的时候a不变,应该怎么写?
查看完整描述

7 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

var a = {v: 1}

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

    b.v = 2

    

    a.v == b.v  // false

    

    

    

或者


var a = {v: 1}

var b = Object.assign({}, a);

b.v = 2


a.v == b.v  // false


查看完整回答
反对 回复 2019-03-21
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

像a这种情况,可以使用深度拷贝将值赋给b

var b = JSON.parse(JSON.stringify(a));

当然这里a只有一层属性,也可以使用

var b = Object.assign({}, a);


查看完整回答
反对 回复 2019-03-21
?
冉冉说

TA贡献1877条经验 获得超1个赞

这个方法有很多,Object.assign() ...运算符。还有上面说的stringify 和parse。
其实是一个拷贝的问题:Object.assign 和 ... 属于浅拷贝。JSON.parse(JSON.stringify())不能拷贝原型对象。这之中的问题。楼主可以自己搜索下。
另外 内存储存类型:堆和栈。也可以去baidu/google下。

查看完整回答
反对 回复 2019-03-21
?
智慧大石

TA贡献1946条经验 获得超3个赞

对于一层的对象可以这样


b = {...a}

题目的语法过程。


在生成一个{v:1}存在堆地址0x0001

a指向地址0x0001

b指向a的地址0x0001

修改此地址的v的值

a/b指向相同,所以。。。


查看完整回答
反对 回复 2019-03-21
  • 7 回答
  • 0 关注
  • 562 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号