值和引用的区别
他们的区别在于箭头指向:
值类型就是把我的绝世武功给你,我是不变的!而你可以学我的!但是你学了蛤蟆功,跟我没什么关系
引用类型取决于变量地址,确切的说你偷走我的钱包!花完之后又给了我!最后值都是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
浅拷贝
想让引用类型 跟值类型一样效果:你过你的,我过我的
object.assign({}, a){}
空的或者新增,可惜他只能一层浅拷贝
var a = {
name:"苍井空"
}
var b = Object.assign({}, a)
b.name = "饭岛爱"
console.log(`此时a:${a.name}, 而b则是${b.name}`)
深拷贝
第一层的a{ name:"xx" }
本体没变,但是第二层的a{ mygirl: ... } 却都被改变了
第一招:lodash _.clone("浅")
和 _.cloneDeep("深")
var a = { name:"大帅哥", mygirl:['苍xx','饭xx','波多xxx'] }
var b = _.cloneDeep(a)
var b = _.clone(a)
第二招:
var a = {
name: "大帅哥",
mygirl: ['苍xx', '饭xx', '波多xxx'],
}
var b = structuredClone(a)
b.mygirl[0] = "饭岛爱"
console.log(`a:${a.mygirl} `)
console.log(`b:${b.mygirl} `)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。