数据类型
基本数据类型:String、Number、Null、undefined、Boolean、Symbol、BigInt;
引用数据类型:Object
深浅拷贝问题
简单的介绍下深浅拷贝
浅拷贝
浅拷贝:就是拷贝的地址,当你拷贝过后改动里面的属性或者值的时候,那么它原来里面的值或者属性就会随之改变。
下面代码就是实现的一个浅拷贝,虽然是拷贝过来了,但是呢,可以通过打印发现变量person和obj里面的salary的值都成了52000,62000.这就是浅拷贝。
let persons = [
{
username: 'aji',
sex: '男',
salary: 50000
},
{
username: 'gpang',
sex: '男',
salary: 60000
}
]
let obj = persons;
obj.map(item =>{
item.salary +=2000;
})
console.log(obj);
console.log(persons);
我们简单分析一下,这是一个数组里面的是有对象的。这就可以视为包含了复杂数据类型。那怎么实现深拷贝,不改变原来数组里面对象属性的值呢?
下面深拷贝就会讲解这个问题
深拷贝
深拷贝:拷贝的是值,拷贝过后改变值不会影响原来数据类型里面的值。
实现一维数组的深拷贝的方法有:简单的for循环,数组的slice()、concat()方法,或者是ES6的rest参数(...).
实现对象的深拷贝方法:for循环,转成JSON在转换成对象。
那么下面的代码就运用的到,用JSON.parse和JSON.stringify相互转换,然后用map遍历,
就可以实现深拷贝。
let persons = [
{
username: 'jjb',
sex: '男',
salary: 50000
},
{
username: 'gpang',
sex: '男',
salary: 60000
}
]
let obj=JSON.parse(JSON.stringify(persons));
obj.map(item =>{
item.salary +=2000;
})
console.log(obj);
console.log(persons);
小结
- 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎
点赞
和关注!