• 每个前端都应该掌握的7个代码优化的小技巧


     前端面试题库 (面试必备)            推荐:★★★★★

    地址:前端面试题库

    1. 字符串的自动匹配(Array.includes

    在写代码时我们经常会遇到这样的需求,我们需要检查某个字符串是否是符合我们的规定的字符串之一。最常见的方法就是使用||===去进行判断匹配。但是如果大量的使用这种判断方式,定然会使得我们的代码变得十分臃肿,写起来也是十分累。其实我们可以使用Array.includes来帮我们自动去匹配。

    代码示例:

    1. // 未优化前的写法
    2. const isConform = (letter) => {
    3. if (
    4. letter === "a" ||
    5. letter === "b" ||
    6. letter === "c" ||
    7. letter === "d" ||
    8. letter === "e"
    9. ) {
    10. return true;
    11. }
    12. return false;
    13. };
    1. // 优化后的写法
    2. const isConform = (letter) =>
    3. ["a", "b", "c", "d", "e"].includes(letter);

    2.for-offor-in自动遍历

    for-offor-in,可以帮助我们自动遍历Arrayobject中的每一个元素,不需要我们手动跟更改索引来遍历元素。

    注:我们更加推荐对象(object)使用for-in遍历,而数组(Array)使用for-of遍历

    for-of

    1. const arr = ['a',' b', 'c'];
    2. // 未优化前的写法
    3. for (let i = 0; i < arr.length; i++) {
    4. const element = arr[i];
    5. console.log(element);
    6. }
    1. // 优化后的写法
    2. for (const element of arr) {
    3. console.log(element);
    4. }
    5. // expected output: "a"
    6. // expected output: "b"
    7. // expected output: "c"

    for-in

    1. const obj = {
    2. a: 1,
    3. b: 2,
    4. c: 3,
    5. };
    6. // 未优化前的写法
    7. const keys = Object.keys(obj);
    8. for (let i = 0; i < keys.length; i++) {
    9. const key = keys[i];
    10. const value = obj[key];
    11. // ...
    12. }
    1. // 优化后的写法
    2. for (const key in obj) {
    3. const value = obj[key];
    4. // ...
    5. }

    3.false判断

    如果你想要判断一个变量是否为null、undefined、0、false、NaN、'',你就可以使用逻辑非(!)取反,来帮助我们来判断,而不用每一个值都用===来判断

    1. // 未优化前的写法
    2. const isFalsey = (value) => {
    3. if (
    4. value === null ||
    5. value === undefined ||
    6. value === 0 ||
    7. value === false ||
    8. value === NaN ||
    9. value === ""
    10. ) {
    11. return true;
    12. }
    13. return false;
    14. };
    1. // 优化后的写法
    2. const isFalsey = (value) => !value;

    4.三元运算符代替(if/else

    在我们编写代码的时候肯定遇见过if/else选择结构,而三元运算符可以算是if/else的一种语法糖,能够更加简洁的表示if/else

    1. // 未优化前的写法
    2. let info;
    3. if (value < minValue) {
    4. info = "Value is最小值";
    5. } else if (value > maxValue) {
    6. info = "Value is最大值";
    7. } else {
    8. info = "Value 在最大与最小之间";
    9. }
    1. //优化后的写法
    2. const info =
    3. value < minValue
    4. ? "Value is最小值"
    5. : value > maxValue ? "Value is最大值" : "在最大与最小之间";

    5.函数调用的选择

    三元运算符还可以帮我们判断当前情况下该应该调用哪一个函数,

    1. function f1() {
    2. // ...
    3. }
    4. function f2() {
    5. // ...
    6. }
    7. // 未优化前的写法
    8. if (condition) {
    9. f1();
    10. } else {
    11. f2();
    12. }
    1. // 优化后的写法
    2. (condition ? f1 : f2)();

    6.用对象代替switch/case选择结构

    switch case通常是有一个case值对应一个返回值,这样的结构就类似于我们的对象,也是一个键对应一个值。我们就可以用我们的对象代替我们的switch/case选择结构,使代码更加简洁

    1. const dayNumber = new Date().getDay();
    2. // 未优化前的写法
    3. let day;
    4. switch (dayNumber) {
    5. case 0:
    6. day = "Sunday";
    7. break;
    8. case 1:
    9. day = "Monday";
    10. break;
    11. case 2:
    12. day = "Tuesday";
    13. break;
    14. case 3:
    15. day = "Wednesday";
    16. break;
    17. case 4:
    18. day = "Thursday";
    19. break;
    20. case 5:
    21. day = "Friday";
    22. break;
    23. case 6:
    24. day = "Saturday";
    25. }
    1. // 优化后的写法
    2. const days = {
    3. 0: "Sunday",
    4. 1: "Monday",
    5. 2: "Tuesday",
    6. 3: "Wednesday",
    7. 4: "Thursday",
    8. 5: "Friday",
    9. 6: "Saturday",
    10. };
    11. const day = days[dayNumber];

    7. 逻辑或(||)的运用

    如果我们要获取一个不确定是否存在的值时,我们经常会运用if判断先去判断值是否存在,再进行获取。如果不存在我们就会返回另一个值。我们可以运用逻辑或(||)的特性,去优化我们的代码

    1. // 未优化前的写法
    2. let name;
    3. if (user?.name) {
    4. name = user.name;
    5. } else {
    6. name = "Anonymous";
    7. }
    1. // 优化后的写法
    2. const name = user?.name || "Anonymous";
    写在最后

    伙伴们,如果你觉得我写的文章对你有帮助就给zayyo点一个赞👍或者关注➕都是对我最大的支持。当然你也可以加我微信:IsZhangjianhao,邀你进我的前端学习交流群,一起学习前端,成为更优秀的工程师~

     前端面试题库 (面试必备)            推荐:★★★★★

    地址:前端面试题库

  • 相关阅读:
    新服务器上CentOS 8 安装mysql 8.0 全过程
    python语音识别的第三方库,语音识别python实战项目
    反射_数据结构
    性能压力测试的定义及步骤是什么
    LeetCode 刷题系列 -- 1425. 带限制的子序列和
    (附源码)计算机毕业设计SSM建筑材料采购管理系统
    MySQL:Update高并发下变慢的案例及其涉及的特性
    申请测试号进行练习
    c++中如何利用VA_LIST 和单体模式,构建自己的log小系统
    STM32CubeMX学习笔记-CAN接口使用
  • 原文地址:https://blog.csdn.net/weixin_42981560/article/details/133705022