服务器之家:专注于服务器技术及软件下载分享
分类导航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服务器之家 - 编程语言 - JavaScript - js教程 - 五种使 JavaScript 代码库更干净的方法

五种使 JavaScript 代码库更干净的方法

2021-12-29 23:23Mason程 js教程

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

五种使 JavaScript 代码库更干净的方法

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

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

  1. function SomeMethod(paramThatCanBeUndefined) { 
  2.  
  3.    const localValue = paramThatCanBeUndefined || "Default Value"
  4.    console.log(localValue) 
  5.    // ... 
  6. SomeMethod() // Default Value 
  7. SomeMethod("SomeValue") // SomeValue 

尝试以下方法:

  1. function SomeMethod( 
  2.   console.log(paramThatCanBeUndefined) 
  3.   // ... 
  4. SomeMethod() // Default Value 
  5. SomeMethod("SomeValue") // SomeValue 

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

  1. function SomeMethod(paramThatCanBeUndefined = "Default Value") {         
  2.   console.log(paramThatCanBeUndefined)   
  3.   // ... 
  4. SomeMethod(null) // will not Default Value, will null Instead 
  5. SomeMethod("SomeValue") // SomeValue 

2、处理多个条件

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

一种更干净的方法是:

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

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

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

  1. const UserRole = { 
  2.   ADMIN: "Admin"
  3.   GENERAL_USER: "GeneralUser"
  4.   SUPER_ADMIN: "SuperAdmin"
  5. }; 
  6. function getRoute(userRole = "default role"){ 
  7.  
  8.  
  9.   switch(userRole){ 
  10.     case UserRole.ADMIN: 
  11.       return "/admin" 
  12.     case UserRole.GENERAL_USER: 
  13.         return "/GENERAL_USER" 
  14.     case UserRole.SUPER_ADMIN: 
  15.         return "/superadmin" 
  16.     default
  17.       return "/"  
  18.   } 
  19.  
  20. console.log(getRoute(UserRole.ADMIN)) // return "/admin" 
  21. console.log(getRoute("Anything")) // return Default path 
  22. console.log(getRoute()) // return Default path 
  23. console.log(getRoute(null)) // return Default path 
  24.  
  25. // More cases if new arrive 
  26. // You can think if else instead of switch 

动态键值对版本:

  1. const UserRole = { 
  2.    ADMIN: "Admin"
  3.    GENERAL_USER: "GeneralUser"
  4.    SUPER_ADMIN: "SuperAdmin"
  5. }; 
  6. function getRoute(userRole = "default role"){ 
  7.  const appRoute = { 
  8.   [UserRole.ADMIN]: "/admin"
  9.   [UserRole.GENERAL_USER]: "/user"
  10.   [UserRole.SUPER_ADMIN]: "/superadmin" 
  11.  }; 
  12.  return appRoute[userRole] || "Default path"
  13. console.log(getRoute(UserRole.ADMIN)) // return "/admin" 
  14. console.log(getRoute("Anything")) // return Default path 
  15. console.log(getRoute()) // return Default path 
  16. console.log(getRoute(null)) // return Default path 
  17. // No more switch/if-else here. 
  18. // Easy to Further expansion 

4、避免过多的函数参数

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

这是一种更清洁的方法:

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

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

这看起来很繁琐:

  1. const someObject = { 
  2.  title: null
  3.  subTitle: "Subtitle"
  4.  buttonColor: null
  5.  disabled: true 
  6. }; 
  7. function createOption(someObject) { 
  8.  someObject.title = someObject.title || "Default Title"
  9.  someObject.subTitle = someObject.subTitle || "Default Subtitle"
  10.  someObject.buttonColor = someObject.buttonColor || "blue"
  11.  someObject.disabled = someObject.disabled !== undefined ?  someObject.disabled : true
  12.  return someObject 
  13. console.log(createOption(someObject)); 
  14.  
  15. // Output be like  
  16. // {title: 'Default Title', subTitle: 'Subtitle', buttonColor: 'blue', disabled: true

这种方法看起来更好:

  1. const someObject = { 
  2.   title: null
  3.   subTitle: "Subtitle"
  4.   buttonColor: null
  5.   disabled: true 
  6.  }; 
  7.  function creteOption(someObject) { 
  8.   const newObject = Object.assign({ 
  9.    title: "Default Title"
  10.    subTitle: "Default Subtitle"
  11.    buttonColor: "blue"
  12.    disabled: true 
  13.  },someObject) 
  14.  return newObject 
  15.  } 
  16.  console.log(creteOption(someObject)); 

原文链接:https://www.toutiao.com/a7046985686419014157/

延伸 · 阅读

精彩推荐
  • js教程JavaScript canvas实现雨滴特效

    JavaScript canvas实现雨滴特效

    这篇文章主要为大家详细介绍了JavaScript canvas实现雨滴特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    huangdong19316862021-12-29
  • js教程JavaScript代码实现简单计算器

    JavaScript代码实现简单计算器

    这篇文章主要为大家详细介绍了JavaScript代码实现简单计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    小虫虫~3992021-12-21
  • js教程JavaScript中arguments的使用方法详解

    JavaScript中arguments的使用方法详解

    这篇文章主要给大家介绍了关于JavaScript中arguments的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    等待的L先生3612021-12-15
  • js教程微信小程序学习之自定义滚动弹窗

    微信小程序学习之自定义滚动弹窗

    这篇文章主要给大家介绍了关于微信小程序学习之自定义滚动弹窗的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考...

    юноша9052021-12-15
  • js教程原生JavaScript实现留言板

    原生JavaScript实现留言板

    这篇文章主要为大家详细介绍了原生JavaScript实现留言板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    栋栋很优秀啊5232021-12-29
  • js教程JavaScript canvas实现文字时钟

    JavaScript canvas实现文字时钟

    这篇文章主要为大家详细介绍了JavaScript canvas实现文字时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    _Adoph6092021-12-29
  • js教程使用 JavaScript 进行数据分组最优雅的方式

    使用 JavaScript 进行数据分组最优雅的方式

    对数据进行分组,是我们在开发中经常会遇到的需求,使用 JavaScript 进行数据分组的方式也有很多种,但是由于没有原生方法的支持,我们自己实现的数据...

    code秘密花园4332021-12-27
  • js教程一文搞懂JavaScript中的Typeof用法

    一文搞懂JavaScript中的Typeof用法

    typeof 运算符是 JavaScript 的基础知识点,尽管它存在一定的局限性(见下文),但在前端js的实际编码过程中,仍然是使用比较多的类型判断方式。...

    锋享前端8072021-12-29