本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
五种使 JavaScript 代码库更干净的方法
itnanba · 226浏览 · 发布于2021-12-30 +关注

今天向大家介绍5种使JavaScript代码库更干净的方法,一起来看一下都有哪些吧!

1、使用默认参数代替短路或条件

默认参数通常比短路更干净。

function SomeMethod(paramThatCanBeUndefined) { 

   const localValue = paramThatCanBeUndefined || "Default Value"; 
   console.log(localValue) 
   // ... 
} 
SomeMethod() // Default Value 
SomeMethod("SomeValue") // SomeValue

    尝试以下方法:

    function SomeMethod( 
      console.log(paramThatCanBeUndefined) 
      // ... 
    } 
    SomeMethod() // Default Value 
    SomeMethod("SomeValue") // SomeValue

      声明:Falsy值,如'',"",false,null,0,和NaN将不会被默认值替代:

      function SomeMethod(paramThatCanBeUndefined = "Default Value") {         
        console.log(paramThatCanBeUndefined)   
        // ... 
      } 
      SomeMethod(null) // will not Default Value, will null Instead 
      SomeMethod("SomeValue") // SomeValue

        2、处理多个条件

        const conditions = ["Condition 2","Condition String2"]; 
        someFunction(str){ 
          if(str.includes("someValue1") || str.includes("someValue2")){ 
            return true 
          }else{ 
            return false 
          } 
        }

          一种更干净的方法是:

          someFunction(str){ 
             const conditions = ["someValue1","someValue2"]; 
             return conditions.some(condition=>str.includes(condition)); 
          }

            3、用动态键值对替换开关(即对象文字)

            开关版本(或将开关替换为if / else):

            const UserRole = { 
              ADMIN: "Admin", 
              GENERAL_USER: "GeneralUser", 
              SUPER_ADMIN: "SuperAdmin", 
            }; 
            function getRoute(userRole = "default role"){ 
            
            
              switch(userRole){ 
                case UserRole.ADMIN: 
                  return "/admin" 
                case UserRole.GENERAL_USER: 
                    return "/GENERAL_USER" 
                case UserRole.SUPER_ADMIN: 
                    return "/superadmin" 
                default: 
                  return "/"  
              } 
            
            } 
            console.log(getRoute(UserRole.ADMIN)) // return "/admin" 
            console.log(getRoute("Anything")) // return Default path 
            console.log(getRoute()) // return Default path 
            console.log(getRoute(null)) // return Default path 
            
            // More cases if new arrive 
            // You can think if else instead of switch

              动态键值对版本:

              const UserRole = { 
                 ADMIN: "Admin", 
                 GENERAL_USER: "GeneralUser", 
                 SUPER_ADMIN: "SuperAdmin", 
              }; 
              function getRoute(userRole = "default role"){ 
               const appRoute = { 
                [UserRole.ADMIN]: "/admin", 
                [UserRole.GENERAL_USER]: "/user", 
                [UserRole.SUPER_ADMIN]: "/superadmin" 
               }; 
               return appRoute[userRole] || "Default path"; 
              } 
              console.log(getRoute(UserRole.ADMIN)) // return "/admin" 
              console.log(getRoute("Anything")) // return Default path 
              console.log(getRoute()) // return Default path 
              console.log(getRoute(null)) // return Default path 
              // No more switch/if-else here. 
              // Easy to Further expansion

                4、避免过多的函数参数

                function myFunction(employeeName,jobTitle,yrExp,majorExp){ 
                 return `${employeeName} is working as ${jobTitle} with ${yrExp}    years of experience in ${majorExp}` 
                } 
                //output be like John is working as Project Manager with 12 year of experience in Project Management 
                // you can call it via 
                console.log(myFunction("John","Project Manager",12,"Project Management")) 
                //    ***** PROBLEMS ARE ***** 
                // Violation of 'clean code' principle 
                // Parameter sequencing is important 
                // Unused Params warning if not used 
                // Testing need to consider a lot of edge cases.

                  这是一种更清洁的方法:

                  function myFunction({employeeName,jobTitle,yrExp,majorExp}){ 
                   return `${employeeName} is working as ${jobTitle} with ${yrExp} years of experience in ${majorExp}` 
                  } 
                  //output be like John is working as Project Manager with 12 year of experience in Project Management 
                  // you can call it via 
                  const mockTechPeople = { 
                    employeeName:"John", 
                    jobTitle:"Project Manager", 
                    yrExp:12, 
                    majorExp:"Project Management" 
                  } 
                  console.log(myFunction(mockTechPeople)) 
                  // ES2015/ES6 destructuring syntax is in action 
                  // map your desired value to variable you need.

                    5、使用Object.assign设置默认对象

                    这看起来很繁琐:

                    const someObject = { 
                     title: null, 
                     subTitle: "Subtitle", 
                     buttonColor: null, 
                     disabled: true 
                    }; 
                    function createOption(someObject) { 
                     someObject.title = someObject.title || "Default Title"; 
                     someObject.subTitle = someObject.subTitle || "Default Subtitle"; 
                     someObject.buttonColor = someObject.buttonColor || "blue"; 
                     someObject.disabled = someObject.disabled !== undefined ?  someObject.disabled : true; 
                     return someObject 
                    } 
                    console.log(createOption(someObject)); 
                    
                    // Output be like  
                    // {title: 'Default Title', subTitle: 'Subtitle', buttonColor: 'blue', disabled: true}

                     这种方法看起来更好:
                    const someObject = { 
                      title: null, 
                      subTitle: "Subtitle", 
                      buttonColor: null, 
                      disabled: true 
                     }; 
                     function creteOption(someObject) { 
                      const newObject = Object.assign({ 
                       title: "Default Title", 
                       subTitle: "Default Subtitle", 
                       buttonColor: "blue", 
                       disabled: true 
                     },someObject) 
                     return newObject 
                     } 
                     console.log(creteOption(someObject));

                       


                      相关推荐

                      RN开发环境的npm私库本地debug调试

                      manongba · 698浏览 · 2019-05-09 17:03:46
                      你不知道的浏览器渲染原理

                      追忆似水年华 · 1373浏览 · 2019-05-09 22:47:56
                      基于iview的router常用控制方式

                      追忆似水年华 · 999浏览 · 2019-06-03 10:39:21
                      编程小知识之 JavaScript 文件读取

                      manongba · 717浏览 · 2019-06-10 09:16:16
                      10个省时间的 PyCharm 技巧 赶快收藏!

                      · 703浏览 · 2019-06-10 09:32:01
                      加载中

                      0评论

                      评论
                      分类专栏
                      小鸟云服务器
                      扫码进入手机网页