这个问题怎么取名我有点楞,是和内存有关吧(⊙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

凤凰求蛊
TA贡献1825条经验 获得超4个赞
像a这种情况,可以使用深度拷贝将值赋给b
var b = JSON.parse(JSON.stringify(a));
当然这里a只有一层属性,也可以使用
var b = Object.assign({}, a);

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

智慧大石
TA贡献1946条经验 获得超3个赞
对于一层的对象可以这样
b = {...a}
题目的语法过程。
在生成一个{v:1}存在堆地址0x0001
a指向地址0x0001
b指向a的地址0x0001
修改此地址的v的值
a/b指向相同,所以。。。
添加回答
举报
0/150
提交
取消