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

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

 [[442863]]

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)); 

 

责任编辑:华轩 来源: 今日头条
相关推荐

2011-07-27 09:41:52

虚拟化

2022-06-07 09:30:35

JavaScript变量名参数

2020-03-09 19:10:01

AI物联网智能

2021-09-01 08:55:20

JavaScript代码开发

2021-11-30 10:20:24

JavaScript代码前端

2020-01-06 10:01:12

JavaScript浏览器HTML

2020-02-11 12:35:19

Kubernetes容器

2023-05-09 15:01:43

JavaScript编程语言异常处理

2023-11-21 15:23:15

JavaScript工具

2022-05-10 10:28:21

JavaScript代码

2023-11-14 13:39:40

2023-03-30 13:59:29

物联网工业4.0

2019-09-23 10:59:31

机器学习算法编程

2019-09-23 11:17:46

机器学习数据技术

2019-08-28 10:05:27

数据中心云计算互联网

2023-06-02 15:42:51

JavaScript数据结构对象

2022-03-16 11:06:05

区块链支付安全

2022-10-31 07:09:15

拷贝代码项目

2024-04-22 13:42:32

大型语言模型人工智能

2015-05-11 10:48:28

代码干净的代码越少越干净
点赞
收藏

51CTO技术栈公众号