如何让你的JS代码更好看易读


Posted in Javascript onDecember 01, 2017

作为JS程序员,自己写的代码如果好看易读,不只是自己看起来好看,在别的程序员接手以后,也会是交接工作异常顺利。

不要在代码中留大段注释掉的代码

留给git去管理,不然你要git干嘛

// bad

// function add() {
// const a = b + c
// return a
// }

function add() {
 return a + 1000
}

// good
function add() {
 return a + 1000
}

适当地换行

// bad
function a() {
 const {
 state_a,
 state_b,
 state_c
 } = this.state
 this.setState({state_a: state_a * 2})
 return 'done'
}

// good
function a() {
 const {
 state_a,
 state_b,
 state_c
 } = this.state

 this.setState({state_a: state_a * 2})

 return 'done'
}

适当的添加注释,但不要疯狂的添加注释

对一段代码或者一行特别需要注意的代码注释

不要疯狂的注释,太??拢??恋拇?胱约夯崴祷?/p>

// bad
const a = 'a' // 这是a
const b = 'b' // 这是b
const c = 'c' // 这是c

// good
/**
 * 申明变量
 */
 const a = 'a'
 const b = 'b'
 const c = 'c'

将类似行为、命名的代码归类在一起

// bad
function handleClick(arr) {
 const a = 1

 arr.map(e => e + a)

 const b = 2

 return arr.length + b
}

// good
function handleClick(arr) {
 const a = 1
 const b = 2

 arr.map(e => e + a)

 return arr.length + b
}

在不破坏语义性的情况下,'能省则省'

牢记js中函数是一等公民

但是,如果省略到影响可读性了,就是失败的

在可读性和简洁性至今必须选一个的话,永远先选可读性

function add(a) {
 return a + 1
}

function doSomething() {

}

// bad
arr.map(a => {
 return add(a)
})

setTimeout(() => {
 doSomething()
}, 1000)

// good
arr.map(add)

setTimeout(doSomething, 1000)

箭头函数

// bad
const a = (v) => {
 return v + 1
}

// good
const a = v => v + 1


// bad
const b = (v, i) => {
 return {
 v,
 i
 }
}

// good
const b = (v, i) => ({v, i})


// bad
const c = () => {
 return (dispatch) => {
 // doSomething
 }
}

// good
const c = () => dispatch => {
 // doSomething
}

提前对对象取值(写react的同学一定懂)

// bad
const a = this.props.prop_a + this.props.prop_b

this.props.fun()

// good
const {
 prop_a,
 prop_b,
 fun
} = this.props

const a = prop_a + prop_b

fun()

合理使用各种表达式

// bad
if (cb) {
 cb()
}

// good
cb && cb()


// bad
if (a) {
 return b
} else {
 return c
}

// good
return a ? b : c


// bad
if (a) {
 c = a
} else {
 c = 'default'
}

// good
c = a || 'default'

链式调用写法

// bad
fetch(url).then(res => {
 return res.json()
}).then(() => {
 // doSomething
}).catch(e => {

})

// good
fetch(url)
 .then(res => {
 return res.json()
 })
 .then(() => {
 // doSomething
 })
 .catch(e => {

 })

保持代码是纵向发展的

发现那些在整个文件中特别'突出'的代码时,应该考虑对他们做换行处理了

// bad
return handleClick(type, key, ref, self, source, props)

// good
return handleClick(
 type,
 key,
 ref,
 self,
 source,
 props
)

// bad
const a = this.props.prop_a === 'hello' ? <di>world</div> : null

// good
const a = this.props.prop_a === 'hello'
 ? <di>world</div>
 : null
Javascript 相关文章推荐
js自定义事件代码说明
Jan 31 Javascript
基于jquery的二级联动菜单实现代码
Apr 25 Javascript
删除select中所有option选项jquery代码
Aug 12 Javascript
禁止ajax缓存获取程序最新数据的方法
Nov 19 Javascript
让html页面不缓存js的实现方法
Oct 31 Javascript
判断访客终端类型集锦
Jun 05 Javascript
js实现自动轮换选项卡
Jan 13 Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 Javascript
JavaScript+CSS相册特效实例代码
Sep 07 Javascript
Vue开发实现吸顶效果的示例代码
Aug 21 Javascript
ES6 系列之 Generator 的自动执行的方法示例
Oct 19 Javascript
微信小程序开发实现的IP地址查询功能示例
Mar 28 Javascript
javascript中new Array()和var arr=[]用法区别
Dec 01 #Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
Dec 01 #Javascript
利用JS测试目标网站的打开响应速度
Dec 01 #Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 #Javascript
javascript按顺序加载运行js方法
Dec 01 #Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
Dec 01 #Javascript
javascript Function函数理解与实战
Dec 01 #Javascript
You might like
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
js右键菜单效果代码
2007/07/21 Javascript
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
jQuery中:input选择器用法实例
2015/01/03 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
Python常见文件操作的函数示例代码
2011/11/15 Python
Python中replace方法实例分析
2014/08/20 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
python 默认参数相关知识详解
2019/09/18 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
python中sys模块是做什么用的
2020/08/16 Python
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
2014年居委会工作总结
2014/12/09 职场文书
慰问信格式
2015/02/14 职场文书
综合素质评价个性与发展自我评价
2015/03/06 职场文书
爱国影片观后感
2015/06/18 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
使用Pytorch训练two-head网络的操作
2021/05/28 Python