猿问

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

这个问题怎么取名我有点楞,是和内存有关吧(⊙o⊙)…


var a = {v: 1}

var b = a

b.v = 2


a.v == b.v  // true

我希望在改变b.v的时候a不变,应该怎么写?


鸿蒙传说
浏览 563回答 7
7回答

梵蒂冈之花

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 = 2a.v == b.v  // false

凤凰求蛊

像a这种情况,可以使用深度拷贝将值赋给bvar b = JSON.parse(JSON.stringify(a));当然这里a只有一层属性,也可以使用var b = Object.assign({}, a);

冉冉说

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

智慧大石

对于一层的对象可以这样b = {...a}题目的语法过程。在生成一个{v:1}存在堆地址0x0001a指向地址0x0001b指向a的地址0x0001修改此地址的v的值a/b指向相同,所以。。。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答