使用JSLint提高JS代码质量方法分享


Posted in Javascript onDecember 16, 2013

随着富 Web 前端应用的出现,开发人员不得不重新审视并重视 JavaScript 语言的能力和使用,抛弃过去那种只靠“复制 / 粘贴”常用脚本完成简单前端任务的模式。JavaScript 语言本身是一种弱类型脚本语言,具有相对于 C++ 或 Java 语言更为松散的限制,一切以函数为中心的函数式编程思想也为开发人员提供了更加灵活的语法实现。然而,这种灵活性在带来高效的同时,也成为初学或者经验不足的 JavaScript 开发人员的噩梦。形式各异的代码风格、隐含错误的代码行为,严重影响了整体代码的可读性和稳定性,成为 Web 项目中最为常见问题之一。

因而,我们需要一个有效的 JavaScript 代码质量工具,以便能及时发现并修正 JavaScript 代码中所隐含的问题,保证代码交付质量。JSLint 作为一个灵活有效的 JavaScript 代码质量检测工具,允许使用者指定满足其特定应用开发需求的编码风格约定,使得整个项目的风格统一,这种“规则”(options)驱动的工作方式使得 JSLint 能够适用于不同的代码检测需求。本文将首先向读者介绍 JSLint 的基本概念和作用,讲解其基于规则的工作方式,而后通过一个示例阐明其基本的使用方法,最后介绍如何将 JSLint 整合到 Ant 和 Eclipse 的应用过程,以全方面展示如何将 JSLint 在日常开发任务中加以运用。

什么是 JSLint
JavaScript 作为一门年轻、语法灵活多变且对格式要求相对松散的语言,代码格式的混乱和某些语言特性的不正确使用,往往使得最终交付的产品中包含许多因编码风格约定造成的未预见的行为或错误,这种习惯性的问题如果不及时指出并修改,往往会在项目的迭代过程中不断的重现,严重影响 Web 产品的稳定性与安全性。JSLint 正是 Douglas Crockford 同学为解决此类问题创建的工具,JSLint 除了能指出这些不合理的约定,还能标出结构方面的问题。虽然 JSLint 不能保证代码逻辑一定正确,但却有助于发现错误并教会开发人员一些好的编码实践。值得一提的是 JSLint 工具本身也是一段 JavaScript 代码,它是检验 JavaScript 代码质量的 JavaScript 脚本。JSLint 对 JavaScript 脚本的质量检测主要包括以下几个方面:

•检测语法错误:例如大括号“{}”的配对错误。
•变量定义规范:例如未定义变量的检测。
•代码格式规范:例如句末分号的缺失。
•蹩脚语言特性的使用检测:如 eval 和 with 的使用限制。
JSLint 的版本更新一直处于活跃状态,截至本文撰写之时,JSLint 最新版本的发布时间为 2010-10-10。很多主流代码编辑器均对 JSLint 提供了良好的扩展支持,包括 Eclipse、VS2008 等等。

目前,与 JSLint 功能类似的 JavaScript 代码检测工具有很多,包括:YUI Test、Firebug、MS Script Debugger 、CompanionJS 等等,它们中大多数都是以浏览器插件的形式存在于客户端浏览器进行 JavaScript 运行时的检测和调试,JSLint 与这些工具的重要区别在于其更加注重静态代码格式的检测,而这也正是当前火热的敏捷开发中持续构建所需要和提倡的。

认识 JSLint 规则
JSLint 执行代码质量检测的原理核心在于用户设定的规则集。JSLint 默认提供的规则集包含了 Web 开发人员多年积累下来的认为不好的开发风格,我们可以根据自己项目的需求选择构建一套特定的规则。JSLint 将根据它进行对 JavaScript 脚本的扫描工作,并给出相应的问题描述信息。规则的形式体现为多组键值对:[param:option],以规则名做键,对规则调用与否做值。例如规则:“plusplus:true”是不允许 ++ 和 -- 运算符的出现,“undef:true”是不允许使用未定义的变量。

由于 JSLint 工具本质上是一个普通的 JS 脚本,其运行也自然依赖于一个 JS 运行引擎,其被引擎加载后会在内存中产生一个全局 JSLint 函数对象,该函数对象需要两个输入量:source 和 options,前者用来指定待检测的脚本文件被解析后生成的字符串或字符串数组,后者则表示用户自定义的规则选项。若 options 为空,JSLint 则使用其默认的规则对 source 进行扫描检测。

整个检测过程就是对脚本中所含 JSLINT (source, options) 函数的一次执行过程。当指定的 source 脚本在 options 条件下检测通过,则 JSLint 返回 true,否则返回 false,而这时则可以通过 JSLINT.errors 对象获得详细的错误信息。图 1 展示了 JSLint 的整个工作过程。

图 1. JSLint 工作过程示意图

使用JSLint提高JS代码质量方法分享

如图所示,规则集的配置方式有三种:

1.直接通过修改 JSLint.js 源码来修改默认规则。
2.在 JSLint 函数运行时,同时设置 options 参数,动态改变其规则选项(first overwrite)。此方式适用于对批量 js 文件使用同样的一组自定义规则。
3.通过在待检测的 js 文件头部添加注释类型的规则,对单个 js 文件添加适用于该文件代码的特殊规则(second overwrite)。此方式适用于对不同 js 文件设置特定的检测规则,通常用于在该文件中引入一些全局变量。

Javascript 相关文章推荐
javascript 弹出的窗口返回值给父窗口具体实现
Nov 23 Javascript
windows8.1+iis8.5下安装node.js开发环境
Dec 12 Javascript
jQuery+PHP实现动态数字展示特效
Mar 14 Javascript
JavaScript实现自动变换表格边框颜色
May 08 Javascript
JavaScript提升性能的常用技巧总结【经典】
Jun 20 Javascript
深入了解javascript 数组的sort方法
Jun 01 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
Nov 01 Javascript
Async/Await替代Promise的6个理由
Jun 15 Javascript
javascript实现摄像头拍照预览
Sep 30 Javascript
jQuery操作元素追加内容示例
Jan 10 jQuery
Vuex实现简单购物车
Jan 10 Vue.js
利用JavaScript写一个简单计算器
Nov 27 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
Dec 16 #Javascript
利用js动态添加删除table行的示例代码
Dec 16 #Javascript
js判断undefined类型,undefined,null, 的区别详细解析
Dec 16 #Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
Dec 16 #Javascript
js AppendChild与insertBefore用法详细对比
Dec 16 #Javascript
js中AppendChild与insertBefore的用法详细解析
Dec 16 #Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
Dec 16 #Javascript
You might like
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
通过javascript设置css属性的代码
2009/12/28 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
基于vue实现分页效果
2017/11/06 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
python爬虫容易学吗
2020/06/02 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
小学生成长感言
2014/01/30 职场文书
批评与自我批评材料
2014/02/15 职场文书
小学教师师德承诺书
2014/05/23 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python