JSHint默認使用用戶當前目錄下的.jshintrc文件(json格式)做爲配置文件
英文文檔javascript
各類配置方式java
"jshintConfig": { "undef": true, "unused": true, "predef": [ "MY_GLOBAL", "ads" ] }
運行時jshint會從當前路徑下開始,一層一層往上找
/**示例配置**/ { "sub":true, "laxbreak":true, "laxcomma":true, "regexp":true, "asi": true, "browser": true, "loopfunc":true, "expr":true, "node": true, "es5": true, "esnext": true, "bitwise": true, "curly": true, "immed": true, "latedef": false, "expr": true, "eqeqeq": false, "eqnull": false, "newcap": true, "noarg": true, "undef": true, "proto": true, "strict": false, "smarttabs": true }
除了使用配置文件,您能夠在你的文件中使用jshint或者globals開頭,
並跟着配置項以冒號分隔值列表來配置JSHint。node
例如,下面的代碼片斷將啓用警告未定義的和未使用的變量和告訴JSHint全局變量命名MY_GLOBAL。jquery
/* jshint undef: true, unused: true */ /* globals MY_GLOBAL */
可使用單行或者多行來配置JSHint,若是放在函數裏面,則隻影響該函數。
ignore 告訴jshint忽略一個代碼塊web
// Code here will be linted with JSHint. /* jshint ignore:start */ // Code here will be ignored by JSHint. /* jshint ignore:end */
上面的代碼在jshint ignore:start和 ignore:end之間的全部代碼都將被JSHint忽略;shell
或者忽略一行:數據庫
ignoreThis(); // jshint ignore:line
以上都只是示例,具體使用的話仍是去看文檔吧,orz -_-|||編程
Enforcing: 這些規則被置爲true,JSHint會對代碼進行更嚴格的檢查。 Relaxing: 這些規則被置爲true,JSHint會容忍規則中定義的狀況出現。 Environment: 這些規則被置爲true,JSHint會認爲代碼默認有一些全局變量
1.校驗選項:Enforcing
bitwise 禁用位運算符,位運算符在 JavaScript 中使用較少,常常是把 && 錯輸成 &。 bitwise: true
camelcase 警告:此選項已被棄用,將在JSHint的下一個主要版本被刪除. 此選項能夠強制全部變量名稱爲使用駝峯風格或UPPER_CASE用下劃線。 camelcase:true/false
curly 循環或者條件語句必須使用花括號包圍. 這個選項須要你老是把花括號在塊循環和條件。JavaScript塊時能夠省略括號包含只有一個語句,例如: while (day) shuffle(); 然而,在某些狀況下,它會致使錯誤(你可能會認爲 sleep()是一個循環的一部分,而事實上它不是) while (day) shuffle(); sleep();
enforceall 警告:此選項已被棄用,將在JSHint的下一個主要版本被刪除. 它啓用全部強制執行選項和禁用該版本中定義的全部的Relaxing options;
eqeqeq 設置爲true,禁止使用這個選項 ==和 !=,強制使用 ===和 !==。 eqeqeq: true
es3 警告:此選項將在JSHint的下一個主要版本被刪除,使用esversion: 3代替. 使用ECMAScript 3規範。使用這個選項主要爲了兼容低級瀏覽器 IE 6/7/8/9-and其餘遺留JavaScript環境。
es5 警告:此選項將被刪除在JSHint的下一個主要版本,使用 esversion: 5代替。 這個選項容許語法中定義ECMAScript 5.1規範,這包括容許保留關鍵字做爲對象屬性。
esversion 這個選項用於指定的ECMAScript版本代碼必須遵循。它能夠假設如下值之一: 3--若是你須要可執行程序在老這類瀏覽器Internet Explorer 6/7/8/9-and其餘遺留JavaScript環境 5--先使語法中定義ECMAScript 5.1規範。這包括容許保留關鍵字做爲對象屬性。 6--告訴JSHint代碼使用ECMAScript 6具體的語法。請注意,並非全部的瀏覽器都實現它們。
forin 這個選項要求全部 for in循環過濾對象的item。他在聲明中容許for遍歷一個對象全部屬性的名稱包括經過原型鏈繼承來的屬性。 for (key in obj) { if (obj.hasOwnProperty(key)) { // We are sure that obj[key] belongs to the object and was not inherited. } }
freeze 這個選項禁止重寫原生對象的原型列如 Array, Date等等。
funcscope 禁止從外部訪問內部聲明的變量 function test() { if (true) { var x = 0; } x += 1; // Default: 'x' used out of scope. // No warning when funcscope:true }
futurehostile 容許警告js將來版本中定義的標識符。
globals 這個選項能夠用來指定一個沒有正式定義的全局變量的白名單。 配置 globals在單個文件,看看內聯配置.
immed 警告:此選項已被棄用,將在JSHint的下一個主要版本被刪除。 須要直接調用的函數必須被括號包圍,如:(function(){}());
indent 警告:此選項將在JSHint的下一個主要版本被刪除。 設置代碼縮進長度
iterator 禁止iterator屬性有關的警告。 此屬性不支持全部瀏覽器因此當心使用它。
latedef 禁止定義以前使用變量。 這個選項設置爲「nofunc」將容許函數聲明被忽略。
maxcomplexity 設置代碼文件獨立直線路徑最大複雜度檢測。
maxdepth 設置代碼最大嵌套深度。 // jshint maxdepth:2 function main(meaning) { var day = true; if (meaning === 42) { while (day) { shuffle(); if (tired) { // JSHint: Blocks are nested too deeply (3). sleep(); } } } }
maxerr 設置JSHint最大警告數。默認50
maxlen 警告:此選項將在JSHint的下一個主要版本被刪除 設置最大行數
maxparams 這個選項容許您設置每一個函數的形參最大數量 // jshint maxparams:3 function login(request, onSuccess) { // ... } // JSHint: Too many parameters per function (4). function logout(request, isManual, whereAmI, onSuccess) { // ... }
maxstatements 這個選項容許您設置語句容許的最大聲明數: // shint maxstatements:4 function main() { var i = 0; var j = 0; // Function declarations count as one statement. Their bodies // don't get taken into account for the outer function. function inner() { var i2 = 1; var j2 = 1; return i2 + j2; } j = i + j; return j; // JSHint: Too many statements per function. (5) } 函數也算聲明。
newcap 警告此選項已被棄用,將被刪除在JSHint的下一個主要版本 要求全部構造器使用new F()形式。
noarg 禁止使用這個選項 arguments.caller和 arguments.callee。這兩個 .caller 和.callee將會被棄用。事實上,ECMAScript 5 嚴格模式禁止使用arguments.callee
nocomma 這個選項禁止使用逗號操做符。
noempty 警告此選項已被棄用,將被刪除在JSHint的下一個主要版本。 空代碼塊警告。
nonbsp 不換行的空格警告
nonew 這個選項禁止使用new構造器函數。有些人喜歡調用構造函數,可是不賦值給任何對象: new MyConstructor();
notypeof 檢查無效 typeof操做符的值 // 'fuction' instead of 'function' if (typeof a == "fuction") { // Invalid typeof value 'fuction' // ... }
predef 擴展的隱式全局變量
quotmark 警告此選項已被棄用,將被JSHint的下一個主要版本刪除。 這個選項執行代碼中使用引號的一致性。它接受三個值: true-- 代碼字符串禁止單引號雙引號混用, "single"--只容許單引號 "double"--只容許雙引號。
shadow 檢查變量重複定義 他接受4個值: "inner" 只檢查是否在相同的做用域重複定義 "outer" 檢查外部做用域 false 與inne同樣 true 容許變量覆蓋
singleGroups 禁止使用分組操做符 // jshint singleGroups: true delete(obj.attr); // Warning: Unnecessary grouping operator.
strict ECMAScript 5嚴格模式 "global" - 全局層面的嚴格模式"use strict"; "implied" - 文件裏面使用"use strict"; false - 禁止使用嚴格模式 true - 函數上面必須使用一個"use strict";
undef 變量未定義 // jshint undef:true function test() { var myVar = 'Hello, World'; // Oops, typoed here. JSHint with undef will complain console.log(myvar); } 若是你的另外一個文件中定義的變量,你可使用 global指令告訴JSHint。
unused 變量定義未使用 // jshint unused:true function test(a, b) { var c, d = 2; return a + d; } test(1, 2); // Line 3: 'b' was defined but never used. // Line 4: 'c' was defined but never used
varstmt 設置爲true時,禁止使用var聲明變量 // jshint varstmt: true var a; // Warning: var declarations are forbidden. Use let or const instead.
2.寬鬆選項:Relaxing
設置爲true時,這些選項會使代碼JSHint產生更少的警告。
asi 禁止缺乏分號警告
boss 禁止比較表達式的值沒有達到預期警告。 一般狀況下,代碼 if (a = 10) {}是一個錯誤,但他有可能這樣用 for (var i = 0, person; person = people[i]; i++) {} 你能夠禁止這個錯誤,好比 for (var i = 0, person; (person = people[i]); i++) {}
debug 忽略 debugger
elision 告訴JSHint代碼使用ES3數組省略元素,或空元素(例如, [1, , , 4, , , 7] ).
eqnull 禁止 == null比較。一般這樣的比較有用,當你想檢查一個變量是否null 或 undefined
eqnull 警告此選項將在JSHint的下一個主要版本被 esversion: 6代替 使用ECMAScript 6具體語法,有些瀏覽器不支持
evil 禁止使用eval
expr 禁止使用表達式,通常的使用函數調用。
globalstrict 下個版本中會使用 strict: "global"代替。 全局嚴格模式會和第三方小插件衝突,因此不推薦使用。
lastsemic 檢查一行代碼最後聲明後面的分號是否遺漏 var name = (function() { return 'Anton' }());
laxbreak 檢查不安全的折行(下個版本將被刪除)
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; }; } nums0; // Prints 12 instead of 2 解決上面的代碼,你須要複製的變量 i: var nums = []; for (var i = 0; i < 10; i++) { (function (i) { nums[i] = function (j) { return i + j; }; }(i)); }
moz JSHint Mozilla擴展。除非你開發專門爲Firefox web瀏覽器不須要這個選項。
multistr 將在下個版本中被刪除 這個選項會抑制警告多行字符串。容許多行字符串在JavaScript是危險的,若是你當心在一個轉義字符()和一個新行之間輸入一個空格,將會致使整個字符串錯誤。 注意,即便這個選項容許正確多行字符串,它仍然警告說對多行字符串沒有轉義字符之間或與任何轉義字符和空格。 // jshint multistr:true var text = "Hello\World"; // All good. text = "HelloWorld"; // Warning, no escape character. text = "Hello\World"; // Warning, there is a space after \
noyield 檢查函數生成器沒有yield聲明
plusplus 禁止一元遞增和遞減運算符的使用
proto 禁止關於__proto__屬性的警告
scripturl 禁止使用腳本URL定向,好比javascript:...
sub 下個版本將被刪除 檢查[]使用,可使用.代替[] person['name'] vs.person.name.
supernew 檢查怪異結構 new function () { ... }和 new Object; 這樣的結構是有時用於單列在JavaScript中: var singleton = new function() { var privateVar; this.publicMethod = function () {} this.publicMethod2 = function () {} };
validthis 注意:可使用這個選項只有在函數的範圍 在非構造器函數中使用 this
withstmt 檢查with使用聲明。 with聲明語句能夠引發開發者和意外全局變量定義之間的混亂。
3.環境選項:Environment
這些選項讓JSHint知道一些預先定義的全局變量。
browser 暴露瀏覽器屬性的全局變量,列如 window,document; 注意:這個選項不暴露變量 alert或 console。
browserify 這個選項定義全局變量使用時可用Browserify工具創建一個項目
couch 這個選項定義全局暴露CouchDB。CouchDB是一個面向文檔的數據庫,能夠查詢和索引MapReduce的方式使用JavaScript
devel 這個選項定義了全局變量,一般用於日誌調試: console, alert等等
dojo 這個選項定義全局暴露的Dojo Toolkit.
jasmine 這個選項定義全局暴露jasmine的單元測試框架.
jquery 這個選項定義全局暴露的jQuery庫。
mocha 這個選項定義全局暴露的「BDD」和「TDD」的ui mocha單元測試框架.
module 這個選項告訴JSHint,輸入代碼描述了一個ECMAScript 6模塊。全部模塊的代碼解釋爲嚴格模式代碼。
mootools 這個選項定義全局暴露的MooToolsJavaScript框架。
node 這個選項定義全局變量能夠當你的代碼運行在node的運行時環境
nonstandard 這個選項定義非標準但普遍採用全局變量等 escape和 unescape.
phantom 這個選項定義全局可用你的核心運行時內部PhantomJS運行時環境
prototypejs 這個選項定義全局暴露的prototypejs框架。
qunit 這個選項定義全局暴露QUnit單元測試框架
rhino 這個選項定義全局變量能夠當你的代碼運行在rhino的運行時環境。rhino是一個開源的實現徹底用Java編寫的JavaScript。
shelljs 這個選項定義全局暴露ShellJS庫
typed 這個選項定義全局變量數組類型構造函數。
worker 這個選項定義全局變量能夠當你的代碼運行在web worker.web worker 是運行在後臺的 JavaScript,獨立於其餘腳本,不會影響頁面的性能. 全部主流瀏覽器均支持 web worker,除了 Internet Explorer。
wsh 這個選項定義全局變量能夠當你的代碼運行在Windows Script Host的運行時環境
yui 這個選項定義全局暴露的yui框架。