Skip to content

JS 基础

Object

深拷贝

深拷贝是将一个对象从内存中完整的拷贝出来,新对象的修改不会影响原对象

  1. JSON.parse(JSON.stringify(obj))

    • 简单快捷,适用于普通对象
    • 但不适用于包含函数、Map、Set、Symbol 或循环引用的对象
  2. 手动递归

js
function deepCopy(obj) {
  if (obj === null || typeof obj !== 'object') {
    return obj; // 基本类型直接返回
  }

  let copy = Array.isArray(obj) ? [] : {}; // 根据类型创建副本

  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      copy[key] = deepCopy(obj[key]); // 递归拷贝嵌套对象
    }
  }

  return copy;
}
  1. Lodash 库的 cloneDeep()

  2. 浏览器原生 structuredClone()

    • 注意兼容性

函数

函数提升

创建函数两种语法:

js
function xxx {
  // 函数会被提升到顶部
}
js
const xxx = () => {
  // 函数不会被提升
}

编译阶段,函数声明会被提升到顶部,函数表达式则不会

下边的写法就会报错:

js
<script setup>
watch(
  () => props.value,
  () => {
    getList() // ❌ 报错:getList is not defined
  },
  { immediate: true }
)

const getList = () => { console.log('ok') }
</script>

这时需要把函数表达式放在使用之前,或使用函数声明即可解决报错

如有转载请标注本站地址