JS手写代码总结

55 阅读2分钟

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

call

bind

apply

柯里化

promise

async、await