转:http://www.cnblogs.com/code/articles/4103070.html
JSHint中文DOC
增强参数(Enforcing Options)
本类参数设为true,JSHint会产生更多告警。
-
bitwise
禁用位运算符(如^, ,&) 位运算符在JS中很少使用,性能也较差,出现&也很可能是想写&&。
-
camelcase
使用驼峰命名(camelCase)或全大写下划线命名(UPPER_CASE)
这是条最佳实践,关键不在于采用什么样的命名规则(比如纯小写配下划线),而在于要有规则,在代码中看到不同的命名规则会让人头痛不已。
-
curly
if和while等语句中使用{}来明确代码块
while (day) shuffle(); sleep();
虽然缩进表示两条语句都在循环中,但事实却是只有一句循环。
-
eqeqeq
使用===和!==替代==和!=
==和!=比较时会对前后元素进行自动转义,作为读者,需要动脑筋想这里可能有什么样的转义规则,加重负担;作为作者,其实很可能是不确定这段代码运行时是怎么样的,想要偷懒。
-
es3
强制使用ECMAScript 3规范
-
forin
在for in循环中使用Object.prototype.hasOwnProperty()来过滤原型链中的属性
for (key in obj) { if (obj.hasOwnProperty(key)) { // We are sure that obj[key] belongs to the object and was not inherieted. } }
for in遍历对象属性的时候,包括继承自原型链的属性,hasOwnProperty可以来判断一个属性是否是对象本身的属性而不是继承得来的。
-
freeze
禁止复写原生对象(如Array, Date)的原型
/* jshint freeze:true */ Array.prototype.count = function (value) { return 4; }; // -> Warning: Extending prototype of native object: 'Array'.
为原生对象添加属性确实看上去很方便,但也带来了潜在的问题,一是如果项目中有多处为同一个对象添加了同样的属性(或函数),则很可能产生冲突;二是如果某段逻辑依赖于对象属性遍历,则可能产生错误。
-
immed
匿名函数调用必须
(function() { // body }());
而不是
(function() { // body })();
这是为了表明,表达式的值是函数的结果,而不是函数本身。
-
indent
代码缩进宽度(空格数)
前面几个项目我比较喜欢4,新项目我又在尝试2。关键不在于是几,而在于大家都要设成一样的。
-
latedef
变量定义前禁止使用
JS的变量是“函数级作用域”,而不是通常所见的“块级作用域”,简单说
function sum(numbers) { for (var i = 0, n = numbers.length; i < n; i++) { var sum = sum + numbers[i]; } return sum; }
相当于
function sum(numbers) { var i, n, sum; for (i = 0, n = numbers.length; i < n; i++) { sum = sum + numbers[i]; } return sum; }
这个行为叫做“变量声明提升”,为了不产生混淆,这条规则建议函数都使用第二种写法。
-
newcap
构造函数名首字母必须大写
这条最佳实践是为了方便区分构造函数和普通函数,这样在直接调用大写字母开头的函数时,使用者就会想想是不是自己写错了。
不通过new而直接调用构造函数,会使得构造函数中的this指向global对象,从而产生错误。
PS. 有些高手可以通过在构造函数中判断this的指向来判断是否重新new自身,从而让构造函数也能直接调用产生新对象。但这有些高深,加重开发人员和使用人员的负担,也不利于统一编码风格。
-
noarg
禁止使用arguments.caller和arguments.callee
一方面这两个属性不是所有的浏览器都支持,另一方面这两个属性的使用会导致JS引擎很难优化代码,在未来的JS规范中会被去掉,所以不建议使用。
-
noempty
禁止出现空的代码块
空的代码块并不是有害的,但是出现的话我们需要考虑下为什么。
-
nonbsp
禁止”non-breaking whitespace”
这是Mac键盘在某种情况下可以键入的字符,据说会破坏非UTF8编码的页面。
-
nonew
禁止使用构造器
new MyConstructor();
构造一个对象,却不给它赋值到某个变量,只是利用构造函数中的逻辑。这个行为完全可以用一个普通函数来完成,不应该借助构造器。
-
plusplus
禁止使用++和–
不是很赞成把这个选项打成true,不过乱用自增/自减确实也会带来阅读上的障碍。
-
quotemark
统一使用单引号或双引号
这个最佳实践要求代码风格统一,我比较喜欢统一成单引号。
这是为什么规定最佳实践的一个好例子,在写到字符串的时候我们就不用考虑使用单引号好还是用双引号好,就都用单引号,这在一定程度上也减轻了我们的思考负担。
-
undef
禁止使用不在全局变量列表中的未定义的变量
function test() { var myVar = 'Hello, World'; console.log(myvar); // Oops, typoed here. JSHint with undef will complain }
如果本地作用域里的变量没有使用var来声明,则会被放到全局作用域下面,众所周知,全局变量时罪恶的源泉。
-
unused
禁止定义变量却不使用
function test(a, b) { var c, d = 2; return a + d; } test(1, 2); // Line 1: 'b' was defined but never used. // Line 2: 'c' was defined but never used.
这种变量通常是写作过程中遗留下来的垃圾,需要及时清理掉。
-
strict
强制使用ES5的严格模式
Strict Mode是对JS用法的一些限制,过滤掉了容易出错的特性和不容易优化的特性。
通过在函数开头处加入’use strict’;来触发严格模式,不要在文件头部加入,因为在JS链接的时候很可能就失效了。
-
trailing
禁止行尾空格
-
maxparams
函数可以接受的最大参数数量
函数参数数量应该控制在3个以内,超出则可能造成使用困难,比如需要记忆参数顺序,难以设定默认值等。另外,在JS中可以很方便的使用参数对象来封装多个参数。
-
maxdepth
代码块中可以嵌入{}的最大深度
-
maxstatement
函数中最大语句数
-
maxcomplexity
函数的最大圈复杂度
-
maxlen
一行中最大字符数
这个是为了减轻代码阅读的困难,简单说就是不要折行。
上面四个参数最终都是为了减小代码的复杂程度,简单轻巧的代码片段更容易阅读和维护。
松弛参数(Relaxing Options)
本类参数设为true,JSHint会产生更少告警。
-
asi
允许省略分号
JavaScript的语法允许自动补全分号,但是这一特性也会造成难以定位的错误,所以建议写代码时不要省略分号。
-
boss
允许在if,for,while语句中使用赋值
在条件语句中使用赋值经常是笔误if (a = 10) {},但是牛人(boss)可以把这个特性用的很好,我们作为普通人就算了。
-
debug
允许debugger语句
debugger语句在产品代码中应该去掉。
-
eqnull
允许==null
==null通常用来比较=== null === undefined -
esnext
允许ECMAScript 6规约
目前ES6的特性不是所有的浏览器都支持。
-
evil
允许使用eval
eval有“注入攻击”的危险,另一方面也不利于JS引擎优化代码,所以尽量不要使用。
-
expr
允许应该出现赋值或函数调用的地方使用表达式
-
funcscope
允许在控制体内定义变量而在外部使用
function test() { if (true) { var x = 0; } x += 1; // Default: 'x' used out of scope. // No warning when funcscope:true }
虽然“变量声明提升”使得上面的代码可以运行通过,但是读者还是会感到头晕。
-
globalstrict
允许全局严格模式
在strict中解释了,’use strict’;放在全局域可能造成JS文件链接错误。
-
iterator
允许__iterator__
不是所有的浏览器都支持__iterator__。
-
lastsemic
允许单行控制块省略分号
var name = (function() { return 'Anton' }());
高手用得到的特性,我们还是坚持加上分号吧。
-
laxbreak
允许不安全的行中断(与laxcomma配合使用)
-
laxcomma
允许逗号开头的编码样式
var obj = { name: 'Anton' , handle: 'valueof' , role: 'SW Engineer' };
-
loopfunc
允许循环中定义函数
在循环中定义函数经常会导致错误:
var nums = []; for (var i = 0; i < 10; i++) { nums[i] = function (j) { return i + j; }; } nums[0](2); // Prints 12 instead of 2
错误的根源在于function(j)中的i是对循环中的i的引用,而不是赋值。所以在最终函数执行时,i的值是10。
修改的方法是使用闭包:
var nums = []; for (var i = 0; i < 10; i++) { (function (i) { nums[i] = function (j) { return i + j; }; }(i)); }
-
maxerr
JSHint中断扫描前允许的最大错误数
因为最终我们需要清零JSHint报错的,所以这个值用在对已有项目的扫描中。
-
multistr
允许多行字符串
-
notypeof
允许非法的typeof操作
-
proto
允许 proto
不是所有的浏览器都支持__proto__.
-
smarttabs
允许混合tab和space排版
SmartTabs方法使用tab进行缩进,使用空格进行代码对齐。比较高级的用法,有兴趣的话可以尝试下。
-
shadow
允许变量shadow
function test() { var x = 10; if (true) { var x = 20; } return x; }
基于“函数作用域”,多次定义变量和单次定义是没有区别的,但是会造成阅读障碍。
-
sub
允许person[‘name’]
JSHint推荐使用person.name代替person[‘name’]
-
supernew
允许new function() {…}和new Object;
-
validthis
允许严格模式下在非构造函数中使用this
-
noyield
允许发生器中没有yield语句
相关推荐
**npm工具jshint详解** `npm`(Node Package Manager)是JavaScript生态系统中的核心组件,它为开发者提供了管理和分发Node.js模块的工具。在众多的npm工具中,`jshint`是一个非常重要的静态代码分析器,专用于检测...
JSHint 是一个社区驱动(community-driven)的工具,用于检测JavaScript代码中的错误和潜在的问题,规范编码风格,确保代码的质量。JSHint在JSLint的基础上做了很多改进,让开发人员可以自己定义校验选项。
README.txt文件通常包含插件的使用说明和安装指南。对于JSHint插件,这份文档可能会指导用户如何启用插件、配置JSHint选项,以及如何处理可能出现的问题。例如,用户可能需要在Notepad++的设置中指定JSHint的配置...
《JSHint 2.4.1 与 BarChart-Feed-DDF:开源条形图数据馈送库解析》 在IT行业中,开发者们经常需要处理各种各样的代码质量和性能问题,而JSHint和BarChart-Feed-DDF就是两个非常实用的工具,它们分别在JavaScript...
**JSHint 离线包详解** JSHint 是一款强大的JavaScript代码质量检查工具,它可以帮助开发者在编码过程中发现潜在的错误、不规范的代码风格以及可能的问题,从而提高代码质量和可维护性。JSHint 离线包是为了方便...
JSHint integration for the Eclipse IDE. Maintained by Ralf Sternberg, EclipseSource. For version history check https://github.com/eclipsesource/jshint-eclipse/releases You can update from command ...
本文将深入探讨Sublime Text中的SublimeLinter插件以及与之配合使用的jshint插件。** **SublimeLinter是一个实时代码检查工具,它可以集成到Sublime Text中,帮助开发者在编写代码时发现潜在的错误和不规范的编程...
jshint2.vim, 轻量级可以定制和功能强大的JSHint集成 jshint2.vim轻量级。定制和功能Vim插件,适用于 JSHint 。 特性Linting全部文件或者未保存到磁盘的选定行。使用项目特定的( 本地安装) 版本JSHint和JSHint配置...
.jshintrc配置文件说明严格选项// 禁用位运算符,位运算符在 JavaScript 中使用较少,经常是把 && 错输成 &// 循环或者条件语句必须使用
SublimeLinter-jshint, SublimeLinter插件,使用 jshint sublimelinter-jshint 这个用于 SublimeLinter的linter插件提供了一个接口,用于 jshint 。 它将与具有"javascript"语法的文件或者HTML文件中的[removed] 标
其中,“fis-lint-jshint”就是这样一个工具,它是一个专门为fis(Fast Integrated Solution)构建系统设计的lint插件,专门用于检查JavaScript文件,确保代码的整洁和一致性。 **fis** FIS,全称为Fast Integrated...
`jshint` 的 `gradle` 插件则是将 `jshint` 集成到 `Gradle` 构建系统中,使得在 Java 或 JavaScript 项目开发过程中,可以方便地对 JavaScript 代码进行静态分析和质量控制。 `Gradle` 是一个灵活且强大的自动化...
**前端项目-JSHint** JSHint 是一个广泛使用的静态代码分析工具,专门针对JavaScript语言。这个工具的主要目的是帮助开发者发现并修复代码中的潜在错误、不符合最佳实践的代码以及风格不一致的问题。在"前端项目-...
您可以使用npm install jshint install jshint在本地npm install jshint或使用npm install -g jshint全局npm install -g jshint 。 如果jshint模块位于其他位置,请使用jshint.nodePath设置指定正确的路径。 jshint...
"litpro-jshint"就是这样一个专门为前端开发设计的开源库,它整合了JSHint的功能,帮助开发者进行代码质量检查,确保代码的健壮性和可维护性。 JSHint是一款非常著名的JavaScript静态代码分析工具,它能对...
JSHint 和 Grunt 是两个在前端开发领域广泛应用的工具,它们极大地提高了代码质量和项目构建效率。 **JSHint** 是一个静态代码分析工具,主要用于检测 JavaScript 代码中的潜在错误和不符合最佳实践的地方。它可以...
jshint-json JSON报告程序 使JSHint与其他工具一起使用变得容易。 安装 npm install --save-dev jshint-json 用法 JSHint CLI $ jshint --reporter node_modules/jshint-json/json.js file.js grunt . ...
**前端开源库-jshint-json** 在前端开发领域,代码质量的把控至关重要,因为这直接影响到项目的稳定性和可维护性。`jshint-json`是这样一个工具,它为前端开发者提供了一个专门针对JavaScript代码进行静态分析的...
brackets-jshint, 将JSHint支持添加到括号 括号 jshint支持JSHint支持的括号扩展。 要安装,请在 brackets/src/extensions/user 文件夹中放置。要查看操作的扩展,打开一个JavaScript文件。 在编辑器的右下角,你将...
Eclipse IDE的JSHint集成 是一种流行的,社区驱动的工具,用于检测JavaScript代码中的错误和潜在问题。 该项目将JSHint集成到Eclipse IDE中。 它会自动验证* .js文件,并为JSHint发现的每个问题添加警告标记。 有关...