如何让你的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 相关文章推荐
学习ExtJS Window常用方法
Oct 07 Javascript
jQuery AJAX回调函数this指向问题
Feb 08 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
Feb 18 Javascript
jQuery获取对象简单实现方法小结
Oct 30 Javascript
开源的javascript项目Kissy介绍
Nov 28 Javascript
JavaScript模拟重力状态下抛物运动的方法
Mar 03 Javascript
javascript常用函数(2)
Nov 05 Javascript
详解AngularJS 模态对话框
Apr 07 Javascript
React入门教程之Hello World以及环境搭建详解
Jul 11 Javascript
bootstrap switch开关组件使用方法详解
Aug 22 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
Apr 23 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
Jun 23 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字符串处理的10个简单方法
2010/06/30 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
简单谈谈python中的语句和语法
2017/08/10 Python
python基于event实现线程间通信控制
2020/01/13 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
亿企通软件测试面试题
2012/04/10 面试题
MYSQL支持事务吗
2013/08/09 面试题
市场部专员岗位职责
2013/11/30 职场文书
打造高效课堂实施方案
2014/03/22 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
CentOS安装Nginx并部署vue
2022/04/12 Servers