前端大佬成长路

76 阅读2分钟

1.疑惑类

1.1 存在疑惑代码的理解:

image.png

非基础数据类型 等号 代表改变变量的地址指向

我这里的目的就是让valueArray 为数组,if( ){} 这里面的代码的意思是 确保代码在一开始为undefinded 或者 null 的时候,仍未数组的形式

image.png

总结来说就是:数组赋值给变量,变量再加在数局里面

1.2 通过索引直接控制分组的显隐和顺序

image.png

2. 遗忘类

2.1 正则表达式

代码理解(惰性匹配)

const nameReg = /【(.*?)】/i
const getName = (name) => {
    const results = nameReg.exec(name)
    console.log(results)
    return results[1]
}

2.2 includes() 方法

3. 技巧类

3.1小图标 + 字符实体 >

小图标则采用vant3的组件库

3.2关于在 computed 书写的必要性

const detailInfos = ref({})
const mainPart = computed(() => detailInfos.value.mainPart)
3.2.1 类比场景

假设原始数据是:

const detailInfos = ref({
  mainPart: "默认内容",
  otherPart: "..."
});
不使用计算属性:
// 直接访问嵌套属性(需重复写冗长路径)
console.log(detailInfos.value.mainPart); // "默认内容"
使用计算属性:
const mainPart = computed(() => detailInfos.value.mainPart);
console.log(mainPart.value); // "默认内容"(自动追踪变化)

总结:在有ref 的时候,为保持数据的响应式,就加上 computed

3.2.2 性能优化:避免重复计算

如果 detailInfos.value.mainPart 的获取需要复杂计算(如过滤、映射等),直接多次访问会导致重复计算:

// ❌ 每次访问都会执行 getter 函数
const filteredList = detailInfos.value.mainPart.filter(item => item.active);

使用 computed 后,结果会被缓存,只有依赖变化时才重新计算:

// ✅ 计算属性自动缓存
const filteredList = computed(() => 
  detailInfos.value.mainPart.filter(item => item.active)
);
3.2.3  代码可维护性:集中管理数据逻辑

将 detailInfos.value.mainPart 映射为 mainPart,相当于为数据创建了一个抽象层

  • 简化代码:后续使用 mainPart 代替冗长的 detailInfos.value.mainPart
  • 逻辑隔离:如果未来 mainPart 的获取方式变化(比如需要附加处理),只需修改计算属性的定义,而无需全局搜索替换。

3.3 通过索引直接控制分组的显隐和顺序

 为什么不用 indexOf

  • includes() 更语义化,直接返回布尔值,无需判断 indexOf() !== -1
  • includes() 能正确处理 NaN,而 indexOf 无法检测 NaN

4. 知识点类

关于background

复合属性写法 background: url(../img/detail/icon_check.png) 0 0 / 100% 100% 详解:

  1. 背景图片路径
    url(../img/detail/icon_check.png) 指定了背景图片的路径,浏览器会加载该位置的图片作为背景。
  2. 背景位置
    0 0 是 background-position 的简写,表示图片的起始位置为元素的左上角(X 轴和 Y 轴均无偏移)。
  3. 背景尺寸
    / 100% 100% 是 background-size 的值,表示图片会被拉伸或压缩以完全覆盖元素的整个区域(宽度和高度均占满 100%)。