如何让你的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 相关文章推荐
JQuery EasyUI 对话框的使用方法
Oct 24 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
javaScript中push函数用法实例分析
Jun 08 Javascript
基于JQuery实现图片轮播效果(焦点图)
Feb 02 Javascript
javascript HTML5 canvas实现打砖块游戏
Jun 18 Javascript
Vue2实现组件props双向绑定
Dec 02 Javascript
jquery做个日期选择适用于手机端示例
Jan 10 Javascript
React-Native中props具体使用详解
Sep 04 Javascript
浅谈Webpack 持久化缓存实践
Mar 22 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
Jul 11 jQuery
layer.open 获取不到表单信息的解决方法
Sep 26 Javascript
js动态生成表格(节点操作)
Jan 12 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
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
逆序二维数组插入一元素的php代码
2012/06/08 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
小学教师岗位职责
2013/11/25 职场文书
中学生差生评语
2014/01/30 职场文书
执行总经理岗位职责
2014/02/03 职场文书
移交协议书
2014/08/19 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL
在python中读取和写入CSV文件详情
2022/06/28 Python
python数字图像处理实现图像的形变与缩放
2022/06/28 Python
python中validators库的使用方法详解
2022/09/23 Python