new操作符
防抖
节流
浅拷贝
定义
浅拷贝是指创建一个新的对象或数组,并复制原始对象或数组的值。它们可能共享一些内部数据,但并不共享相同的内存地址。当对新对象或数组进行修改时,不会影响原始对象或数组的值。
实现方式
- 对象:使用
Object.assign()、扩展操作符{...}等等。 - 数组:使用
Array.slice()、Array.concat()、扩展操作符[...]等等。
应用场景
浅拷贝适用于复制简单对象,并且在部分属性修改或只读副本等场景中使用
代码实现
// 对象拷贝
const obj = {
name:'test',
age:20
}
// 对象拷贝第一种
const copyObj = Object.assign({},obj)
// 对象拷贝第二种
const copyObj = {...obj}
copyObj.age = 30
console.log(obj.age) // 20
console.log(copyObj.age) // 30
// 数组的浅拷贝
const arr = [1,2,3]
// 第一种
cosnt copyArr = arr.slice()
copyArr[0] = 10
// 第二种
const copyArr = arr.concat()
//第三种
const copyArr = [...arr]
copyArr[0] = 10
console.log(copyArr) //[10,2,3]
深拷贝
定义
深拷贝是指创建一个新的对象或数组,并递归地复制原始对象或数组的所有嵌套对象和数组。新对象或数组是完全独立的,与原始对象或数组没有任何关联,对新对象或数组的修改不会影响原始对象或数组。
实现方式
- 对象和数组:使用
JSON.parse(JSON.stringify())方法对对象或数组进行序列化和反序列化。
应用场景
适用于复制复杂对象或数组,其中对象的属性或数组的元素也是对象或数组,或不希望修改副本后影响原始对象或数组。
代码实现
const obj = {
name: "John",
age: 25,
hobbies: ["抽烟", "喝酒", "烫头"],
address: {
city: "北京",
country: "中国",
coordinates: {
latitude: 39.9042,
longitude: 116.4074
}
}
};
const copyObj = JSON.parse(JSON.stringify(obj))
copyObj.age = 20
console.log(copyObj.age) // 20