如何让你的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 相关文章推荐
使用onbeforeunload属性后的副作用
Mar 08 Javascript
javascript 屏蔽鼠标键盘的几段代码
Jan 02 Javascript
使用jscript实现二进制读写脚本代码
Jun 09 Javascript
JavaScript动态添加列的方法
Mar 25 Javascript
BootStrap 附加导航组件
Jul 22 Javascript
jQuery实现Select左右复制移动内容
Aug 05 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
Aug 16 Javascript
jquery心形点赞关注效果的简单实现
Nov 14 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
Nov 27 Javascript
Js实现中国公民身份证号码有效性验证实例代码
May 03 Javascript
Nuxt.js实战和配置详解
Aug 05 Javascript
如何使用gpu.js改善JavaScript的性能
Dec 01 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
php 时间计算问题小结
2009/01/04 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
详解PHP数组赋值方法
2015/11/07 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
2014/08/18 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
python实现绘制树枝简单示例
2014/07/24 Python
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
Django的分页器实例(paginator)
2017/12/01 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
中国跨境电商:Tomtop
2017/03/16 全球购物
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
毕业生求职信
2014/06/10 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
2015年宣传部部长竞选演讲稿
2014/11/28 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
如何用vue实现网页截图你知道吗
2021/11/17 Vue.js