说到这个其实要引伸出一个知识点,那即是存储类型,简单来讲分为值类型(又名 原始类型,六种 → string,number,null,undefined,boolean,symbol(不重复得值))和引用类型(又名 对象类型 例如 function,Array)
其中常见值类型有String、Number、Boolean、引用类型有function、Array
引用类型有this指针指向问题、因此本次说的浅深拷贝也是指引用类型
具体能够在本博客 输入关键词 js变量按照存储方式区分 搜索
let test = {
name:'zachary'
}
let demo = test
test.name = 'changes'
// 其实 demo 并无变值 但确实 被test再次赋值给带跑偏了
console.log(demo) // changes
console.log(test) //changes
let test = {
name:'zachary'
}
//let demo = Object.assign({},test)
let demo = {...test}
test.name = 'changes'
console.log(demo) // zachary
console.log(test) //changes
let test = [1,2,3]
let demo = Object.assign([],test)
// let demo = [...test]
test.push('changes')
console.log(demo) // [1, 2, 3]
console.log(test) //[1, 2, 3, "changes"]
let map = {
city:'重庆市',
province:{
jangxi:'江西省'
}
}
// let cloneMap = {...map} 对于深拷贝无效
// let cloneMap = Object.assign({},map) 对于深拷贝无效
let cloneMap = JSON.parse(JSON.stringify(map))
cloneMap.province.jangxi='changes'
console.log(cloneMap) //jangxi:changes
console.log(map)//jiangxi:'江西省'
会忽略 undefined
不能序列化函数
不能解决循环引用的对象
可是在一般状况下,复杂数据都是能够序列化的,因此这个函数能够解决大部分问题,而且该函数是内置函数中处理深拷贝性能最快的