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 相关文章推荐
JavaScript判断两种格式的输入日期的正确性的代码
Mar 25 Javascript
javascript下过滤数组重复值的代码
Sep 10 Javascript
Extjs在exlipse中设置自动提示的方法
Apr 07 Javascript
node.js中的fs.appendFile方法使用说明
Dec 17 Javascript
详解Js模板引擎(TrimPath)
Nov 22 Javascript
JavaScript数据结构之数组的表示方法示例
Apr 12 Javascript
vue toggle做一个点击切换class(实例讲解)
Mar 13 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
Sep 13 Javascript
react-navigation之动态修改title的内容
Sep 26 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
Jun 11 Javascript
node 版本切换的实现
Feb 02 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
Aug 12 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学习之PHP运算符
2006/10/09 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
php显示时间常用方法小结
2015/06/05 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
express框架下使用session的方法
2019/07/31 Javascript
在Python中使用判断语句和循环的教程
2015/04/25 Python
Python中操作文件之write()方法的使用教程
2015/05/25 Python
Python利用ansible分发处理任务
2015/08/04 Python
Django中Forms的使用代码解析
2018/02/10 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
Python3实现zip分卷压缩过程解析
2019/10/09 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
用python解压分析jar包实例
2020/01/16 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
《最大的“书”》教学反思
2014/02/14 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
免职证明样本
2014/10/23 职场文书
地震慰问信
2015/02/14 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书