含义
原始值就是最简单的数据,引用值就是由多个值构成的对象
原始值 (复制值)
- null
- undefined
- Number
- String
- Boolean
当我们把这些初始值赋给了变量的时候, 我们 复制了值.
var a = 5;
var b = a;
a = 10;
console.log(a); // 10
console.log(b); // 5 没有变化
引用值 (复制引用)
- Object
- Array
- Function
var obj1 = {a: 1} //引用值
var obj2 = obj1
obj2.a = 2
console.log(obj1) // {a: 2} obj1跟着变化了
解析: obj2复制引用了obj1 ,只是指向了那个obj1的地址,所以我们更新这个地址的内容的时候,obj1 和 obj2 有着相同的值
深拷贝和浅拷贝
当我们的需求是对象的复制非引用时候,深拷贝和浅拷贝就用上了
当user中都是基础的数据类型的时候 ----浅拷贝
let user = {
name: "lwb",
age: 18
};
let cloneUser = Object.assign({}, user);
cloneUser.name="wst"
console.log(user.name); //lwb
console.log(cloneUser.name); //wst
当数据结构比较复杂的时候 ---- 深拷贝
浅拷贝还是解决不了
let user = {
name: "lwb",
age: 18,
baby:{
baby1:'旺旺',
baby2:'多多'
},
arr:["1","2","3"]
};
let cloneUser = Object.assign({},user)
console.log(user);
console.log(cloneUser); //这个时候输出,看不出有什么区别,两者输出一样
//此时我们从cloneUser修改baby中的小芳,看看有啥变化
cloneUser.baby.baby1="旺财";
cloneUser.arr[0]="6666";
console.log(user);
console.log(cloneUser); //这个时候,无论是user还是cloneUser中的baby2都变成了“旺财”,arr中也变成了6666
深拷贝解决需求
let user = {
name: "lwb",
age: 18,
baby:{
baby1:'旺旺',
baby2:'多多'
},
arr:["1","2","3"]
};
let cloneUser = JSON.parse(JSON.stringify(user))
当某一个对象修改值得时候,就不会影响到另外一个对象了