5种方法告诉你如何使JavaScript 代码库更干净


Posted in Javascript onSeptember 15, 2021

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

到此这篇关于如何使JavaScript 代码库更干净 5种方法告诉你的文章就介绍到这了,更多相关使 JavaScript 代码库更干净的5种方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!谢谢大家的阅读

Javascript 相关文章推荐
刷新时清空文本框内容的js代码
Apr 23 Javascript
javascript正则表达式中参数g(全局)的作用
Nov 11 Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 Javascript
jQuery实现鼠标经过事件的延时处理效果
Aug 20 Javascript
javascript随机抽取0-100之间不重复的10个数
Feb 25 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
Mar 16 Javascript
JS模拟实现ECMAScript5新增的数组方法
Mar 20 Javascript
详解vue项目构建与实战
Jun 27 Javascript
react-native之ART绘图方法详解
Aug 08 Javascript
实例讲解javascript实现异步图片上传方法
Dec 05 Javascript
微信小程序修改checkbox的样式代码实例
Jan 21 Javascript
vue 调用 RESTful风格接口操作
Aug 11 Javascript
JavaScript小技巧带你提升你的代码技能
Sep 15 #Javascript
javascript函数式编程基础
Sep 15 #Javascript
15个值得收藏的JavaScript函数
Sep 15 #Javascript
详解JavaScript中Arguments对象用途
详细谈谈JavaScript中循环之间的差异
Aug 23 #Javascript
javascript代码简写的几种常用方式汇总
Aug 23 #Javascript
vue使用Google Recaptcha验证的实现示例
You might like
PHP获取文件相对路径的方法
2015/02/26 PHP
PHP实现远程下载文件到本地
2015/05/17 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
javascript设计模式 接口介绍
2012/07/24 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
Python脚本实现12306火车票查询系统
2016/09/30 Python
pandas数值计算与排序方法
2018/04/12 Python
Python生成器generator用法示例
2018/08/10 Python
python给微信好友定时推送消息的示例
2019/02/20 Python
Python hashlib模块加密过程解析
2019/11/05 Python
Python求解正态分布置信区间教程
2019/11/20 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
德尔福集团DELPHI的笔试题
2012/02/22 面试题
公司员工检讨书
2014/02/08 职场文书
运动会稿件300字
2014/02/14 职场文书
考察现实表现材料
2014/05/19 职场文书
班级心理活动总结
2014/07/04 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
学校安全管理制度
2015/08/06 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
SpringBoot详解执行过程
2022/07/15 Java/Android