直接上 代码吧,大概就是我项目中碰到的问题的一个缩影了
首先请大佬们 看下 打印结果 和你 预期的是不是相符
import { cloneDeep } from 'lodash'
const priceList = [1, 2]
const animals = { priceList }
const option = {
series: ['dog', 'cat'].map(item => animals)
}
const o = cloneDeep(option) // 这里深拷贝了一个 option
o.series[0].priceList[0] = 5 // 我这里修改了series[0].priceList[0]的值 会不会影响 series[1].priceList的值?
console.log('o: ', o.series[0].priceList)
console.log('o: ', o.series[1].priceList)
结果是真的被修改了,是真的涉及到盲区了,我认为
const o = cloneDeep(option)
这行代码 不应该是把里面所有的引用类型 都深拷贝了一份吗?
为什么还是会被影响到?
借用 @_usw 的回答,再补充一下吧
的确是有个
hashMap
存在的原因导致的关键代码 应该是
这两个 target 都是文中的
animals
所以第二个
serie
直接走了map.get(target)
没有再做处理~