不太理解在Map循环引用的时候,返回的值v1是怎么变化的?
来源:8-23 手写JS深拷贝-考虑各种数据类型和循环引用
我爱study
2022-04-10
// Map
if (obj instanceof Map) {
target = new Map()
map.set(obj, target) // 当这里是map的时候,set了个空的Map(视频里没有讲)
obj.forEach((v, k) => {
const v1 = cloneDeep(v, map)
const k1 = cloneDeep(k, map)
console.log(v1) // 前 输出 Map(0) {size: 0}
target.set(k1, v1)
console.log(v1) // 后 输出 Map(1) {'y' => Map(1)}
})
}
....
// 用例代码
const a = new Map()
a.set('y', a)
当Map循环引用的时候,两处console.log(v1)的值不同
在前面的v1输出 Map(0) {size: 0}
在后面的v1输出Map(1) {‘y’ => Map(1)}
中间只差了个target.set, 后面的值就变了,有点不太理解
写回答
2回答
-
我爱study
提问者
2022-04-11
第17行断点
第19行断点
v1的值变化了,图片有点糊,但是大概看出来
022022-04-12 -
双越
2022-04-11
Chrome 控制台输出引用类型,是不可信的,因为引用类型可能随时变化。
你可以两行都打印 v1.size (返回 number,值类型),看是否一致
052022-04-23
相似问题