深拷贝和浅拷贝的快速解剖
Posted 赵不悔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深拷贝和浅拷贝的快速解剖相关的知识,希望对你有一定的参考价值。
类型汇总
number
:1string
:"abccnm"boolean
:trueobject
:{ } [ ] nullundefined
:undefinedfunction
:(){}symbol()
symbol
值和引用的区别
他们的区别在于箭头指向:
值类型就是把我的绝世武功给你,我是不变的!而你可以学我的!但是你学了蛤蟆功,跟我没什么关系
引用类型取决于变量地址,确切的说你偷走我的钱包!花完之后又给了我!最后值都是0.1
值类型number
string
boolean
var a=1
var b = a
//此时a和b相同等于1
b=2
//此时b等于2,a还是1
引用类型object
{ } [ ]
var a={ money:500 }
var b = a
//此时a和b都是\'我\'
b.money = 1
//此时b等于1,a拿到的也是1
浅拷贝
:想让引用类型跟值一样效果
item就是里面的信息money
run[item]就是 run里面所有名称money或name等
copys(a)就是拷贝出来的 run,祸害我就行了!a不会变
var a = {
money:500
}
function copys(x)
{
var run = {}
for(let item in x)
{
run[item] = x[item]
}
return run
}
var b = copys(a)
b.money = 1
console.log(`此时a:${a.money}, 而b则是${b.money}`)
深拷贝
: 第一层的a{ name:"xx" }本体没变,但是第二层的a{ mygirl:[\'苍xx\',\'饭xx\',\'波多xxx\'] } 却都被改变了
第一招:lodash_.clone("浅")
和_.cloneDeep("深")
var a = { name:"大帅哥", mygirl:[\'苍xx\',\'饭xx\',\'波多xxx\'] }
var b = _.cloneDeep(a)
var b = _.clone(a)
第二招:object.assign({}, a){}
空的或者新增 sb:123 一层浅拷贝
var a = {
name:"苍井空"
}
var b = Object.assign({}, a)
b.name = "饭岛爱"
console.log(`此时a:${a.name}, 而b则是${b.name}`)
第三招:JSON.parse( JSON.stringify(a) )
stringify把你的对象变成字符串,然后再变成对象。重复操作
你看看人家A,你再看看你b
最后一点,那就是这里的a={ fn:function(){ return xxx } }
var a = {
girl:[\'苍xx\',\'饭xx\',\'波多xxx\']
}
var b = JSON.parse( JSON.stringify(a) )
b.girl[0] = "茅房厕子"
console.log(`此时a:${a.girl}, 而b则是${b.girl}`)
以上是关于深拷贝和浅拷贝的快速解剖的主要内容,如果未能解决你的问题,请参考以下文章