• JS的优化技巧


    1. 使用模板字符串进行字符串拼接

    1. // 传统字符串拼接
    2. const tips = "Hello, " + user.name + "!";
    3. // 模板字面量简化
    4. const tips = `Hello, ${user.name}!`;

    2. 使用展开运算符操作数组和对象

    1. // 合并数组
    2. const combined = [...array1, ...array2];
    3. // 复制对象
    4. const clone = { ...obj1 };

    3.使用箭头函数简化函数定义

    1. // 传统函数定义
    2. function sum(a, b) {
    3. return a + b;
    4. }
    5. // 箭头函数简化
    6. const sum = (a, b) => a + b;

    4. 使用解构赋值简化变量声明

    1. // 传统变量声明
    2. const userName = user.name;
    3. const useAge = user.age;
    4. // 解构赋值简化
    5. const { name, age } = user;

    5. 使用条件运算符简化条件判断

    1. // 传统条件判断
    2. let message;
    3. if (status) {
    4. message = '操作成功';
    5. } else {
    6. message = '操作失败';
    7. }
    8. // 条件运算符简化
    9. const message =status? '操作成功' : '操作失败';

    6. 高阶数组方法简化循环和操作数据

    1. // 遍历数组并返回新数组
    2. const doubledNumbers = numbers.map((num) => num * 2);
    3. // 过滤数组
    4. const oddNumbers = numbers.filter((num) => num % 2 !== 0);

    7. 简化函数默认参数

    1. // 传统参数设置默认值
    2. function tips(name) {
    3. const finalName = name || "Friend";
    4. console.log(`Hello, ${finalName}!`);
    5. }
    6. // 对象解构和默认参数简化
    7. function tips({name = "Friend"}) {
    8. console.log(`Hello, ${name}!`);
    9. }

    8. 优化条件判断代码

    大量的if else,过多的switch,叠加在一起的三元运算符就是后续维护的噩梦

    三元叠加代码示例(不推荐):

    1. {{status===1?'成功': status===2 ? '失败' : status===3 ? '进行中' : '未开始' }}
  • 复杂逻辑推荐使用对象映射或者对象 Map 写法,可读性高,更优美

    if else

    1. // param {status} status 活动状态:1:成功 2:失败 3:进行中 4:未开始
    2. // 不推荐
    3. let txt = "";
    4. if (status == 1) {
    5. txt = "成功";
    6. } else if (status == 2) {
    7. txt = "失败";
    8. } else if (status == 3) {
    9. txt = "进行中";
    10. } else {
    11. txt = "未开始";
    12. }

    switch case

    1. // 不推荐
    2. let txt = "";
    3. switch (status) {
    4. case 1:
    5. txt = "成功";
    6. break;
    7. case 2:
    8. txt = "成功";
    9. break;
    10. case 3:
    11. txt = "进行中";
    12. break;
    13. default:
    14. txt = "未开始";
    15. }

    对象映射写法❤️

    1. //推荐
    2. const statusObj = { 1: "成功", 2: "失败", 3: "进行中", 4: "未开始" };
    3. //调用直接 statusObj[status]

    Map 写法❤️

    1. //推荐
    2. const map = new Map([
    3. [1, "成功"],
    4. [2, "失败"],
    5. [3, "进行中"],
    6. [4, "未开始"],
    7. ]);
    8. // 调用直接 map.get(status)

    9.活用for...in给对象赋值

    1. const form = {
    2. name: "",
    3. age: "",
    4. sex: "",
    5. address: "",
    6. };
    7. // 假设asycData现在是从后端拿到的接口数据,需要赋值给form
    8. const asycData = {
    9. name: "路鸣泽",
    10. age: 16,
    11. sex: "男",
    12. address: "翻斗花园",
    13. occupationInfo: {
    14. no: 102,
    15. occ_name: "前端工程师",
    16. },
    17. checkInfo: {
    18. attendance: 15,
    19. holidays: 5,
    20. absence: 2,
    21. },
    22. };
    23. //不推荐,如果表单字段很多,就很冗余
    24. form.name = asycData.name;
    25. form.age = asycData.age;
    26. form.sex = asycData.sex;
    27. form.address = asycData.address;
    28. /* 有的人觉得用Object.assign就可以了,这么做不好的地方就是我们提交表单的时候,
    29. 会提交一堆用不到的数据,后端要是经验不够,未做过滤,就会炸掉。
    30. 不推荐 */
    31. Object.assign(form, asycData);
    32. //推荐
    33. for (let i in asycData) {
    34. form[i] = asycData[i];
    35. }

    10.可选链 ?.

    允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效

    1. //不好的
    2. let arr = res && res.data && res.data.list
    3. //好的
    4. let arr = res?.data?.list
    1. const user = {
    2. employee: {
    3. name: "lion"
    4. }
    5. };
    6. user.employee?.name;
    7. // 输出: "lion"
    8. user.employ?.name;
    9. // 输出: undefined
    10. user.employ.name
    11. // 输出: VM21616:1 Uncaught TypeError: Cannot read property 'name' of undefined

    可选链 这种写法就是防止报错 判断值是否为null或者undefined

    11.空合并运算符 (??)

    当其左侧操作数为空或未定义时返回其右侧操作数,否则返回其左侧操作数。

    1. const name = null ?? 'black cat';
    2. // 输出: "black cat"
    3. const days = 7 ?? 14;
    4. // 输出: 7
    5. const place = undefind ?? 'zoo';
    6. // 输出: "zoo"

    12.嵌套解构赋值

    1. const form = {
    2. name: null,
    3. age: null,
    4. place: null,
    5. };
    6. /* 假设asycData是从后端拿到的数据,现在要给form赋值,
    7. 除了for...in,还有一种嵌套解构赋值也是一种不错的选择 */
    8. const asycData = {
    9. name: "SuperStar",
    10. age: 24,
    11. address: "China",
    12. email: "xxxxx@163.com",
    13. money: 1024,
    14. place: "HangZhou"
    15. };
    16. ({ name: form.name, age: form.age, place: form.place } = asycData);
    17. /* 在解构的同时进行赋值,赋值字段较少的时候,我们可以用这个,
    18. 当赋值字段较多的时候,我们仍然推荐使用for...in
    19. 注意,嵌套赋值需要在外面包裹圆括号,不然js直接遇到{},会直接
    20. 解析成js语句,就会报错
    21. */
  • 相关阅读:
    autopoi-web 导入 excel 解决二级表头重复问题
    设计并实现一个并发安全的LRU(Least Recently Used,最近最少使用)缓存结构
    C语言 3 —— 输入输出
    【LeetCode热题100】【图论】岛屿数量
    2023年【公路水运工程施工企业安全生产管理人员】新版试题及公路水运工程施工企业安全生产管理人员模拟试题
    Ubuntu上安装、使用Redis的详细教程
    C++学习笔记(Ⅳ):C++提高编程
    A. Two Elevators
    Java版Flink使用指南——从RabbitMQ中队列中接入消息流
    自己的数据集做富集分析 自定义基因集做富集分析clusterprolifer
  • 原文地址:https://blog.csdn.net/yxlyttyxlytt/article/details/133949260