如何写好你的JavaScript【推荐】


Posted in Javascript onMarch 02, 2017

前言

在实际工作中,我们应该经常会看到一些功能上没有问题,但编码风格和规范却十分糟糕的代码,这往往会让人不敢再往下阅读,甚至会影响阅读者一天的心情。这些代码不仅不易阅读,而且难以维护,它们一般会出自刚入门的编程新手,也会出自工作了好几年的老程序员手下。因此本文的目的在于帮助那些没有养成良好的编码风格,缺乏相应编码规范意识的JavaScript学习者们改善他们的编码形象。

编码形象

以上我提出了编码形象的概念,我个人认为:

编码形象 = 编码风格 + 编码规范

一个良好的编码形象就等于一个穿着得体的青年,对于程序员来说这是同行了解你优秀能力的最直接最简单的方式。

我们来看一下一段糟糕的编码形象:

//打个招呼
function func(){
 var age=18,sex='man';
 var greeting='hello';
 if(age<=18&&sex=='man'){
 console.log(greeting+'little boy')
 }
 ...
}
func()

上方代码整体缩在了一起,缺乏规范意识,阅读体验很差,不忍直视。

再来看一段良好的代码形象:

// 打个招呼
function greetFn() {
 var age = 18,
 sex = 'man',
 greeting = 'hello';
 if (age <= 18 && sex === 'man') {
 console.log(greeting + 'little boy');
 }
 ...
};
greetFn();

上方的代码是不是感觉舒服多了?

由此可见养成一个良好的编码形象是至关重要的,而本文主要讲解的是基于JavaScript的编码形象,即基于JavaScript的编码风格和编码规范。

那么什么是编码风格,什么是编码规范,两者的区别又是什么?

编码风格

首先编码风格既然是风格,就没有对错之分。就好比每个人的穿着打扮不同,有的人穿的比较得体,有的人穿的比较随意而已。

而在JavaScript编码风格中,也有一套比较得体的风格,尤其在团队开发中,我们不能随意的书写属于自己的风格。

下面就列举几种随意的编码风格,并将其与良好的编码风格进行对比。

1.合理注释

// 不推荐的写法
var name = '劳卜';//代码和注释之间没有间隔

if (name) {
 /*
 *注释之前无空行
 *星号后面无空格
 */
}
// 推荐的写法
var name = '劳卜'; // 代码和注释之间有间隔

if (name) {
 /*
 * 注释之前有空行
 * 星号后面有空格
 */
}

2.合理间隔

// 不推荐的写法
var name='劳卜'; // 等号和两侧之间没有间隔

// if块级语句间没有间隔
if(name){
 console.log('hello');
}
// 推荐的写法
var name = '劳卜'; // 等号和两侧之间有间隔

// if块级语句间有间隔
if (name) {
 console.log('hello');
}

3.合理缩进

// 不推荐的写法:没有合理缩进
function getName() {
console.log('劳卜'); 
}
// 推荐的写法:合理缩进
function getName() {
 console.log('劳卜');
}

4.合理空行

// 不推荐的写法: 代码功能块之间没有空行
function getName() {
 var name = '劳卜';
 if (name) {
 console.log('hello');
 }
}
// 推荐的写法:代码功能块之间有空行
function getName() {
 var name = '劳卜';

 if (name) {
 console.log('hello');
 }
}

5.合理命名

// 不推荐的写法
var getName = '劳卜'; // 变量命名前缀为动词

// 函数命名前缀为名词
function name() {
 console.log('hello');
}
// 推荐的写法
var name = '劳卜'; // 变量命名前缀为名词

// 函数命名前缀为动词
function getName() {
 console.log('hello');
}

6.合理声明

// 不推荐的写法:函数在声明之前使用
getName(); 

function getName() {
 console.log('hello');
}
// 推荐的写法:函数在声明之后使用
function getName() {
 console.log('hello');
}

getName();

7.合理结尾

// 不推荐的写法:没有使用分号结尾
var name = '劳卜' 

var getName = function() {
 console.log('hello')
}
// 推荐的写法:使用分号结尾
var name = '劳卜'; 

var getName = function() {
 console.log('hello');
};

以上主要列举了7个比较常见的编码风格的例子进行了比较,在推荐的写法和不推荐的写法中两者并没有对错之分,只是推荐的写法相比较而言更容易阅读和维护,更适用于团队开发,也是良好编码形象的体现。

编码规范

对于编码规范,既然是规范,那我们就应该按照一定的规则来编写。随意编写违反编码规范的代码,可能会导致程序的出错和潜在的bug,因此其相对于编码风格来说应该更加严谨,也有人会把编码风格包含在编码规范之中。

下面就列举几个常见的实例代码:

1.比较参数

// 不推荐的写法:==和!=比较时会进行类型转换,应尽量避免使用
var num = 123;

if (num == '123') {
 console.log(num);
} else if (num != '321') {
 console.log('321');
}
// 推荐的写法:使用===和!==来进行比较
var num = 123;

if (num === '123') {
 console.log(num);
} else if (num !== '321') {
 console.log('321');
}

2.包裹if语句

// 不推荐的写法:if语句不用大话号包裹会出现潜在bug
var num = 123;
if (num === '123')
 console.log(num);
// 推荐的写法:if语句用大话号包裹
var num = 123;
if (num === '123') {
 console.log(num);
}

3.慎用eval

// 不推荐的写法:应避免使用eval,不安全,非常耗性能(一次解析成js语句,一次执行)
var json = '{"name": "劳卜", "func": alert("hello")}';
eval('(' + json + ')'); // 弹出“hello”
// 推荐的写法
var json = '{"name": "劳卜", "func": alert("hello")}';
JSON.parse(json); // 校验报错

4.判断类型

// 不推荐的写法:用typeof来判断构造函数创建的对象
var str = new String('劳卜'); 
console.log(typeof str); // 'object'
// 推荐的写法:用instanceof来判断构造函数创建的对象
var str = new String('劳卜'); 
console.log(str instanceof String); // true

5.检测属性

// 不推荐的写法:使用undefined和null来检测一个属性是否存在
if (obj['name'] !== undefined) {
 console.log('name属性存在'); // 若obj.name为undefined时则会导致判断出错
}
if (obj['name'] !== null) {
 console.log('name属性存在'); // 若obj.name为null时则会导致判断出错
}
// 推荐的写法:使用in运算符来检测对象属性是否存在,使用hasOwnProperty方法来检测不包含原型链上的对象属性是否存在
if ('name' in obj) {
 console.log('name属性存在');
}
if (obj.hasOwnProperty('name')) {
 console.log('name属性存在');
}

以上主要列举了5个常见的编码规范的例子,合理地规范自己的代码能够很大程度上减少不必要的维护成本和潜在的bug风险,对于JavaScript学习者来说应该铭记于心。

结语

“程序是写给人读的,只是偶尔让计算机执行一下。”我们不能为了贪图一时的方便而亲手毁了自己的代码形象,这会给他人和整个项目带来不必要的麻烦。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
浅谈tudou土豆网首页图片延迟加载的效果
Jun 23 Javascript
jquery div 居中技巧应用介绍
Nov 24 Javascript
动态加载js和css(外部文件)
Apr 17 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
May 08 Javascript
javascript中字符串拼接详解
Sep 26 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
Oct 31 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
Jun 21 Javascript
Bootstrap栅格系统学习笔记
Nov 25 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
Apr 18 Javascript
jQuery实现鼠标移入移出事件切换功能示例
Sep 06 jQuery
vue 表单验证按钮事件交由父组件触发的方法
Dec 17 Javascript
uni app仿微信顶部导航条功能
Sep 17 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
Mar 02 #Javascript
JS操作input标签属性checkbox全选的实现代码
Mar 02 #Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 #Javascript
原生js仿浏览器滚动条效果
Mar 02 #Javascript
使用grunt合并压缩js和css文件的方法
Mar 02 #Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
Mar 02 #Javascript
浅谈Vue.js
Mar 02 #Javascript
You might like
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
javascript基本类型详解
2014/11/28 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
python根据多个文件名批量查找文件
2019/08/13 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
python语言是免费还是收费的?
2020/06/15 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
为数据库创建索引都需要注意些什么
2012/07/17 面试题
几道Java和数据库的面试题
2013/05/30 面试题
印刷工程专业应届生求职信
2013/09/29 职场文书
大学生自我评价怎样写好
2013/10/23 职场文书
董事长职责范文
2013/11/08 职场文书
简历自我评价怎么写好呢?
2014/01/04 职场文书
培训讲师岗位职责
2014/04/13 职场文书
人事任命通知
2015/04/20 职场文书
个人承诺书格式范文
2015/04/29 职场文书
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python