JS 基础
Object
深拷贝
深拷贝是将一个对象从内存中完整的拷贝出来,新对象的修改不会影响原对象
JSON.parse(JSON.stringify(obj))- 简单快捷,适用于普通对象
- 但不适用于包含函数、Map、Set、Symbol 或循环引用的对象
手动递归
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;
}Lodash 库的
cloneDeep()浏览器原生
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>这时需要把函数表达式放在使用之前,或使用函数声明即可解决报错