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对象的比较
Feb 26 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
May 28 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
Aug 20 Javascript
DOM基础教程之使用DOM + Css
Jan 20 Javascript
javascript中CheckBox全选终极方案
May 20 Javascript
解读Bootstrap v4 sass设计
May 29 Javascript
js实现PC端和移动端刮卡效果
Mar 27 Javascript
vue 实现数字滚动增加效果的实例代码
Jul 06 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
Sep 06 Javascript
微信小程序实现点击图片放大预览
Oct 21 Javascript
javascript使用链接跨域下载图片
Nov 01 Javascript
node.js使用http模块创建服务器和客户端完整示例
Feb 10 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
PHP4实际应用经验篇(5)
2006/10/09 PHP
常用的php对象类型判断
2008/08/27 PHP
php执行sql语句的写法
2009/03/10 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
FormValidate 表单验证功能代码更新并提供下载
2008/08/23 Javascript
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
Python模块学习 re 正则表达式
2011/05/19 Python
详解Python中的join()函数的用法
2015/04/07 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
代码详解django中数据库设置
2019/01/28 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
团员个人总结
2015/02/26 职场文书
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL