1、问题代码
const data = {
page: 1
}
let params=data
params.page = 2
console.log('params.page=' + params.page)
console.log('data.page=' + data.page)
这是一种比较常见的问题代码,需要注意的是,在这时,params并未开辟新的内存,params与data引用的是同一个内存地址,所以当你进行修改时,所有引用这个内存地址的值都会发生变化,看一下打印结果
我并未修改data中page的值, 但由于这两个对象引用的是同一个内存地址,所以都发生了变化
2、解决问题
既然知道问题所在(两个对象引用的同一个内存地址),那么解决起来也就简单了,我们只需要开辟一个新的内存后,再将需要用的值存进去就可以解决这个问题,方案如下:
1. 方案一
const data = {
page: 1
}
let params = {
...data
}
params.page = 2
console.log('params.page=' + params.page)
console.log('data.page=' + data.page)
2. 方案二
const data = {
page: 1
}
let params = JSON.parse(JSON.stringify(data))
params.page = 2
console.log('params.page=' + params.page)
console.log('data.page=' + data.page)
这两种方案的打印结果如下:
因为params引用的是一个新的内存地址,所以无论我如何修改params的值,data都不会受影响。
以上仅仅只列出两种解决方案,仅供参考,解决这个问题的核心思想就是“开辟一个新的内存,不让两个对象引用同一个内存地址的值”