JSHint,发现错误和潜在问题的社区驱动的工具
JSLint 错误解析
单独安装
1
| $ npm install jshint -g
|
1 2 3 4 | $ jshint myfile.js myfile.js: line 10, col 39, Octal literals are not allowed in strict mode. 1 error |
编辑器和IDE插件
安装
Ctrl+Shift+P
或 Cmd+Shift+P
输入 install
,选择 Package Control: Install Package
输入 js gutter
,选择 JSHint Gutter
使用方法:
Tools -> Command Palette (Ctrl+Shift+P
或者 Cmd+Shift+P
) 然后输入 jshint
– 或者 –
Ctrl+Shift+J
(或者 Mac 使用 Cmd+Shift+J
)
– 或者 –
当前文件右键选择 JSHint -> Lint Code
– 或者 –
打开 JavaScript 文件,菜单 View -> Show Console,然后输入 view.run_command("jshint"
)
编辑,加载或保存时自动检查
右键 -> JSHint -> Set Plugin Options
三项设置为 true
1 2 3 4 5 | { "lint_on_edit": true, "lint_on_load": true, "lint_on_save": true } |
三种配置方式:
通过 --config
标记手动配置
使用 .jshintrc 文件
配置放到项目的 package.json 文件里面, jshintConfig 下面
JSHint 设置
强制选项
禁用位运算符,位运算符在 JavaScript 中使用较少,经常是把 && 错输成 &
1
| bitwise: true
|
循环或者条件语句必须使用花括号包围
1
| curly: true
|
强制使用三等号
1
| eqeqeq: true
|
兼容低级浏览器 IE 6/7/8/9
1
| es3: true
|
禁止重写原生对象的原型,比如 Array
,Date
1
| freeze: true
|
代码缩进
1
| indent: true
|
禁止定义之前使用变量,忽略 function
函数声明
1
| latedef: "nofunc"
|
构造器函数首字母大写
1
| newcap: true
|
禁止使用 arguments.caller
和 arguments.callee
,未来会被弃用, ECMAScript 5 禁止使用 arguments.callee
1
| noarg:true
|
为 true
时,禁止单引号和双引号混用
1
| "quotmark": false
|
变量未定义
1
| "undef": true
|
变量未使用
1
| "unused": true
|
严格模式
1
| strict:true
|
最多参数个数
1
| maxparams: 4
|
最大嵌套深度
1
| maxdepth: 4
|
复杂度检测
1
| maxcomplexity:true
|
最大行数
1
| maxlen: 600
|
宽松选项
控制“缺少分号”的警告
1 2 | "asi": true "boss": true |
忽略 debugger
1
| "debug": true
|
控制 eval
使用警告
1
| "evil": true
|
检查一行代码最后声明后面的分号是否遗漏
1
| "lastsemic": true
|
检查不安全的折行,忽略逗号在最前面的编程风格
1
| "laxcomma": true
|
检查循环内嵌套 function
1
| "loopfunc": true
|
检查多行字符串
1
| "multistr": true
|
检查无效的 typeof
操作符值
1
| "notypeof": true
|
person['name']
vs. person.name
1
| "sub": true
|
new function () { ... }
和 new Object
;
1
| "supernew": true
|
在非构造器函数中使用 this
1
| "validthis": true
|
环境
预定义一些全局变量
预定义全局变量 document
,navigator
,FileReader
等
1
| "browser": true
|
定义用于调试的全局变量:console
,alert
1
| "devel": true
|
定义全局变量
1 2 | "jquery": true, "node": true |