JSHint配置項(xiàng)說(shuō)明


什么是JSHint?


官方網(wǎng)站這樣介紹:

JSHint, A Static Code Analysis Tool for JavaScript;
This is JSHint, a tool that helps to detect errors and potential
problems in your JavaScript code.

由此可見(jiàn)JSHint是一個(gè)javascript代碼分析檢測(cè)工具,不僅可以幫助我們檢測(cè)到j(luò)s代碼錯(cuò)誤和潛在問(wèn)題,也能幫助我們規(guī)范代碼開(kāi)發(fā)。

JSHint安裝(IED webstrom)


NPM安裝
    npm install jshint -g
JSHint設(shè)置
  • webstrom內(nèi)置了JSHint和jslint:
    Default_Setting-->Languages and frameworks-->javascript-->Code Quality ToolS-->JSHint
Paste_Image.png

jshint配置


三種配置方式
  • 通過(guò) --config標(biāo)記手動(dòng)配置;
  • 使用 .jshintrc 文件:

這個(gè)設(shè)置允許您每個(gè)項(xiàng)目有不同的配置文件。把你的文件放到項(xiàng)目根目錄,只要你運(yùn)行JSHint從任何地方在你的項(xiàng)目目錄樹(shù),將使用相同的配置文件。

  • 配置放到項(xiàng)目的 package.json 文件里面, jshintConfig 下面
    配置文件是一 個(gè)簡(jiǎn)單的JSON文件,指定JSHint選項(xiàng)來(lái)打開(kāi)或關(guān)閉。例如,以下文件將啟用警告未定義的和未使用的變量和告訴JSHint全局變量命名 MY_GLOBAL
    {
    "undef": true,
    "unused": true,
    "predef": [ "MY_GLOBAL" ]
    }

內(nèi)聯(lián)配置

  • 除了使用配置文件,您可以在你的文件中使用jshint或者globals開(kāi)頭,并跟著配置項(xiàng)以冒號(hào)分隔值列表來(lái)配置JSHint。例如,下面的代碼片段將啟用警告未定義的和未使用的變量和告訴JSHint全局變量命名MY_GLOBAL。
    /* jshint undef: true, unused: true /
    /
    globals MY_GLOBAL */
    可以使用單行或者多行來(lái)配置JSHint,如果放在函數(shù)里面,則只影響該函數(shù)。

JSHint 忽略

  • ignore 告訴jshint忽略一個(gè)代碼塊
    // Code here will be linted with JSHint.
    /* jshint ignore:start /
    // Code here will be ignored by JSHint.
    /
    jshint ignore:end */
    在jshint ignore:startignore:end之間的所有代碼都將被JSHint忽略,所以你可以使用像Facebook React這樣的擴(kuò)展框架。
  • 可以忽略一行:
    ignoreThis(); // jshint ignore:line

JSHint配置選項(xiàng)

  • bitwise
    禁用位運(yùn)算符,位運(yùn)算符在 JavaScript 中使用較少,經(jīng)常是把 && 錯(cuò)輸成 &。
    bitwise: true

  • camelcase
    警告:此選項(xiàng)已被棄用,將在JSHint的下一個(gè)主要版本被刪除.
    此選項(xiàng)可以強(qiáng)制所有變量名稱(chēng)為使用駝峰風(fēng)格或UPPER_CASE用下劃線。
    camelcase:true/false

  • curly
    循環(huán)或者條件語(yǔ)句必須使用花括號(hào)包圍.
    這個(gè)選項(xiàng)需要你總是把花括號(hào)在塊循環(huán)和條件。JavaScript塊時(shí)可以省略括號(hào)包含只有一個(gè)語(yǔ)句,例如:
    while (day)
    shuffle();
    然而,在某些情況下,它會(huì)導(dǎo)致錯(cuò)誤(你可能會(huì)認(rèn)為 sleep()是一個(gè)循環(huán)的一部分,而事實(shí)上它不是)
    while (day)
    shuffle();
    sleep();

  • enforceall
    警告:此選項(xiàng)已被棄用,將在JSHint的下一個(gè)主要版本被刪除.
    它啟用所有強(qiáng)制執(zhí)行選項(xiàng)和禁用該版本中定義的所有的Relaxing options

  • eqeqeq
    設(shè)置為true,禁止使用這個(gè)選項(xiàng) ==和 !=,強(qiáng)制使用 ===和 !==。
    eqeqeq: true

  • es3
    警告:此選項(xiàng)將在JSHint的下一個(gè)主要版本被刪除,使用esversion: 3代替.
    使用ECMAScript 3規(guī)范。使用這個(gè)選項(xiàng)主要為了兼容低級(jí)瀏覽器 IE 6/7/8/9-and其他遺留JavaScript環(huán)境。

  • es5
    警告:此選項(xiàng)將被刪除在JSHint的下一個(gè)主要版本,使用 esversion: 5代替。
    這個(gè)選項(xiàng)允許語(yǔ)法中定義ECMAScript 5.1規(guī)范,這包括允許保留關(guān)鍵字作為對(duì)象屬性。

  • esversion
    這個(gè)選項(xiàng)用于指定的ECMAScript版本代碼必須遵循。它可以假設(shè)以下值之一:
    3--如果你需要可執(zhí)行程序在老這類(lèi)瀏覽器Internet Explorer 6/7/8/9-and其他遺留JavaScript環(huán)境
    5--先使語(yǔ)法中定義ECMAScript 5.1規(guī)范。這包括允許保留關(guān)鍵字作為對(duì)象屬性。
    6--告訴JSHint代碼使用ECMAScript 6具體的語(yǔ)法。請(qǐng)注意,并不是所有的瀏覽器都實(shí)現(xiàn)它們。

  • forin
    這個(gè)選項(xiàng)要求所有 for in循環(huán)過(guò)濾對(duì)象的item。他在聲明中允許for遍歷一個(gè)對(duì)象所有屬性的名稱(chēng)包括通過(guò)原型鏈繼承來(lái)的屬性。
    for (key in obj) {
    if (obj.hasOwnProperty(key)) {
    // We are sure that obj[key] belongs to the object and was not inherited.
    }
    }

  • freeze
    這個(gè)選項(xiàng)禁止重寫(xiě)原生對(duì)象的原型列如 Array, Date等等。

  • funcscope
    禁止從外部訪問(wèn)內(nèi)部聲明的變量
    function test() {
    if (true) {
    var x = 0;
    }
    x += 1; // Default: 'x' used out of scope.
    // No warning when funcscope:true
    }

  • futurehostile
    允許警告js未來(lái)版本中定義的標(biāo)識(shí)符。

  • globals
    這個(gè)選項(xiàng)可以用來(lái)指定一個(gè)沒(méi)有正式定義的全局變量的白名單。
    配置 globals在單個(gè)文件,看看內(nèi)聯(lián)配置.

  • immed
    警告:此選項(xiàng)已被棄用,將在JSHint的下一個(gè)主要版本被刪除。
    需要直接調(diào)用的函數(shù)必須被括號(hào)包圍,如:(function(){}());

  • indent
    警告:此選項(xiàng)將在JSHint的下一個(gè)主要版本被刪除。
    設(shè)置代碼縮進(jìn)長(zhǎng)度

  • iterator
    禁止iterator屬性有關(guān)的警告。
    此屬性不支持所有瀏覽器所以小心使用它。

  • latedef
    禁止定義之前使用變量。
    這個(gè)選項(xiàng)設(shè)置為“nofunc”將允許函數(shù)聲明被忽略。

  • maxcomplexity
    設(shè)置代碼文件獨(dú)立直線路徑最大復(fù)雜度檢測(cè)。

  • maxdepth
    設(shè)置代碼最大嵌套深度。
    // 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
    設(shè)置JSHint最大警告數(shù)。默認(rèn)50

  • maxlen
    警告:此選項(xiàng)將在JSHint的下一個(gè)主要版本被刪除
    設(shè)置最大行數(shù)

  • maxparams
    這個(gè)選項(xiàng)允許您設(shè)置每個(gè)函數(shù)的形參最大數(shù)量
    // jshint maxparams:3
    function login(request, onSuccess) {
    // ...
    }

     // JSHint: Too many parameters per function (4).
     function logout(request, isManual, whereAmI, onSuccess) {
         // ...
     }
    
  • maxstatements
    這個(gè)選項(xiàng)允許您設(shè)置語(yǔ)句允許的最大聲明數(shù):
    // 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)
    }
    函數(shù)也算聲明。

  • newcap
    警告此選項(xiàng)已被棄用,將被刪除在JSHint的下一個(gè)主要版本
    要求所有構(gòu)造器使用new F()形式。

  • noarg
    禁止使用這個(gè)選項(xiàng) arguments.caller和 arguments.callee。這兩個(gè) .caller
    和.callee將會(huì)被棄用。事實(shí)上,ECMAScript 5 嚴(yán)格模式禁止使用arguments.callee

  • nocomma
    這個(gè)選項(xiàng)禁止使用逗號(hào)操作符。

  • noempty
    警告此選項(xiàng)已被棄用,將被刪除在JSHint的下一個(gè)主要版本。
    空代碼塊警告。

  • nonbsp
    不換行的空格警告

  • nonew
    這個(gè)選項(xiàng)禁止使用new構(gòu)造器函數(shù)。有些人喜歡調(diào)用構(gòu)造函數(shù),但是不賦值給任何對(duì)象:
    new MyConstructor();

  • notypeof
    檢查無(wú)效 typeof操作符的值
    // 'fuction' instead of 'function'
    if (typeof a == "fuction") { // Invalid typeof value 'fuction'
    // ...
    }

  • predef
    擴(kuò)展的隱式全局變量

  • quotmark
    警告此選項(xiàng)已被棄用,將被JSHint的下一個(gè)主要版本刪除。
    這個(gè)選項(xiàng)執(zhí)行代碼中使用引號(hào)的一致性。它接受三個(gè)值:

  • true-- 代碼字符串禁止單引號(hào)雙引號(hào)混用,

  • "single"--只允許單引號(hào)

  • "double"--只允許雙引號(hào)。

  • shadow
    檢查變量重復(fù)定義
    他接受4個(gè)值:

  • "inner" 只檢查是否在相同的作用域重復(fù)定義

  • "outer" 檢查外部作用域

  • false 與inne一樣

  • true 允許變量覆蓋

  • singleGroups
    禁止使用分組操作符
    // jshint singleGroups: true
    delete(obj.attr); // Warning: Unnecessary grouping operator.

  • strict
    ECMAScript 5嚴(yán)格模式

  • "global" - 全局層面的嚴(yán)格模式"use strict";

  • "implied" - 文件里面使用"use strict";

  • false - 禁止使用嚴(yán)格模式

  • true - 函數(shù)上面必須使用一個(gè)"use strict";

  • undef
    變量未定義
    // jshint undef:true
    function test() {
    var myVar = 'Hello, World';
    // Oops, typoed here. JSHint with undef will complain
    console.log(myvar);
    }
    如果你的另一個(gè)文件中定義的變量,你可以使用 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
    設(shè)置為true時(shí),禁止使用var聲明變量
    // jshint varstmt: true
    var a; // Warning: var declarations are forbidden. Use let or const instead.

寬松選項(xiàng)

設(shè)置為true時(shí),這些選項(xiàng)會(huì)使代碼JSHint產(chǎn)生更少的警告。

  • asi
    禁止缺少分號(hào)警告
  • boss
    禁止比較表達(dá)式的值沒(méi)有達(dá)到預(yù)期警告。
    通常情況下,代碼 if (a = 10) {}是一個(gè)錯(cuò)誤,但他有可能這樣用
    for (var i = 0, person; person = people[i]; i++) {}
    你可以禁止這個(gè)錯(cuò)誤,比如
    for (var i = 0, person; (person = people[i]); i++) {}
  • debug
    忽略 debugger
  • elision
    告訴JSHint代碼使用ES3數(shù)組省略元素,或空元素(例如, [1, , , 4, , , 7]
    ).
  • eqnull
    禁止 == null比較。通常這樣的比較有用,當(dāng)你想檢查一個(gè)變量是否null
    或 undefined
  • eqnull
    警告此選項(xiàng)將在JSHint的下一個(gè)主要版本被 esversion: 6代替
    使用ECMAScript 6具體語(yǔ)法,有些瀏覽器不支持
  • evil
    禁止使用eval
  • expr
    禁止使用表達(dá)式,一般的使用函數(shù)調(diào)用。
  • globalstrict
    下個(gè)版本中會(huì)使用 strict: "global"代替。
    全局嚴(yán)格模式會(huì)和第三方小插件沖突,所以不推薦使用。
  • lastsemic
    檢查一行代碼最后聲明后面的分號(hào)是否遺漏
    var name = (function() { return 'Anton' }());
  • laxbreak
    檢查不安全的折行(下個(gè)版本將被刪除)
  • laxcomma
    檢查逗號(hào)在代碼行最前面的編程風(fēng)格
    var obj = {
    name: 'Anton'
    , handle: 'valueof'
    , role: 'SW Engineer'
    };
  • loopfunc
    禁止內(nèi)部循環(huán),定義函數(shù)的內(nèi)部循環(huán)可能導(dǎo)致這樣的錯(cuò)誤:
    var nums = [];
    for (var i = 0; i < 10; i++) {
    nums[i] = function (j) {
    return i + j;
    };
    }
    nums0; // Prints 12 instead of 2
    解決上面的代碼,你需要復(fù)制的變量 i:
    var nums = [];
    for (var i = 0; i < 10; i++) {
    (function (i) {
    nums[i] = function (j) {
    return i + j;
    };
    }(i));
    }
  • moz
    JSHint Mozilla擴(kuò)展。除非你開(kāi)發(fā)專(zhuān)門(mén)為Firefox web瀏覽器不需要這個(gè)選項(xiàng)。
  • multistr
    將在下個(gè)版本中被刪除
    這個(gè)選項(xiàng)會(huì)抑制警告多行字符串。允許多行字符串在JavaScript是危險(xiǎn)的,如果你小心在一個(gè)轉(zhuǎn)義字符()和一個(gè)新行之間輸入一個(gè)空格,將會(huì)導(dǎo)致整個(gè)字符串錯(cuò)誤。
    注意,即使這個(gè)選項(xiàng)允許正確多行字符串,它仍然警告說(shuō)對(duì)多行字符串沒(méi)有轉(zhuǎn)義字符之間或與任何轉(zhuǎn)義字符和空格。
    // 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
    檢查函數(shù)生成器沒(méi)有yield聲明
  • plusplus
    禁止一元遞增和遞減運(yùn)算符的使用
  • proto
    禁止關(guān)于__proto__屬性的警告
  • scripturl
    禁止使用腳本URL定向,比如javascript:...
  • sub
    下個(gè)版本將被刪除
    檢查[]使用,可以使用.代替[]
    person['name'] vs.person.name.
  • supernew
    檢查怪異結(jié)構(gòu) new function () { ... }和 new Object;
    這樣的結(jié)構(gòu)是有時(shí)用于單列在JavaScript中:
    var singleton = new function() {
    var privateVar;
    this.publicMethod = function () {}
    this.publicMethod2 = function () {}
    };
  • validthis
    注意:可以使用這個(gè)選項(xiàng)只有在函數(shù)的范圍
    在非構(gòu)造器函數(shù)中使用 this
  • withstmt
    檢查with使用聲明。
    with聲明語(yǔ)句可以引起開(kāi)發(fā)者和意外全局變量定義之間的混亂。

環(huán)境變量

這些選項(xiàng)讓JSHint知道一些預(yù)先定義的全局變量。

  • browser
    暴露瀏覽器屬性的全局變量,列如 window,document;
    注意:這個(gè)選項(xiàng)不暴露變量 alert或 console。
  • browserify
    這個(gè)選項(xiàng)定義全局變量使用時(shí)可用Browserify工具建立一個(gè)項(xiàng)目
  • couch
    這個(gè)選項(xiàng)定義全局暴露CouchDB。CouchDB是一個(gè)面向文檔的數(shù)據(jù)庫(kù),可以查詢和索引MapReduce的方式使用JavaScript
  • devel
    這個(gè)選項(xiàng)定義了全局變量,通常用于日志調(diào)試: console, alert等等
  • dojo
    這個(gè)選項(xiàng)定義全局暴露的Dojo Toolkit.
  • jasmine
    這個(gè)選項(xiàng)定義全局暴露jasmine的單元測(cè)試框架.
  • jquery
    這個(gè)選項(xiàng)定義全局暴露的jQuery庫(kù)。
  • mocha
    這個(gè)選項(xiàng)定義全局暴露的“BDD”和“TDD”的ui mocha單元測(cè)試框架.
  • module
    這個(gè)選項(xiàng)告訴JSHint,輸入代碼描述了一個(gè)ECMAScript 6模塊。所有模塊的代碼解釋為嚴(yán)格模式代碼。
  • mootools
    這個(gè)選項(xiàng)定義全局暴露的MooToolsJavaScript框架。
  • node
    這個(gè)選項(xiàng)定義全局變量可以當(dāng)你的代碼運(yùn)行在node的運(yùn)行時(shí)環(huán)境
  • nonstandard
    這個(gè)選項(xiàng)定義非標(biāo)準(zhǔn)但廣泛采用全局變量等 escape和 unescape.
  • phantom
    這個(gè)選項(xiàng)定義全局可用你的核心運(yùn)行時(shí)內(nèi)部PhantomJS運(yùn)行時(shí)環(huán)境
  • prototypejs
    這個(gè)選項(xiàng)定義全局暴露的prototypejs框架。
  • qunit
    這個(gè)選項(xiàng)定義全局暴露QUnit單元測(cè)試框架
  • rhino
    這個(gè)選項(xiàng)定義全局變量可以當(dāng)你的代碼運(yùn)行在rhino的運(yùn)行時(shí)環(huán)境。rhino是一個(gè)開(kāi)源的實(shí)現(xiàn)完全用Java編寫(xiě)的JavaScript。
  • shelljs
    這個(gè)選項(xiàng)定義全局暴露ShellJS庫(kù)
  • typed
    這個(gè)選項(xiàng)定義全局變量數(shù)組類(lèi)型構(gòu)造函數(shù)。
  • worker
    這個(gè)選項(xiàng)定義全局變量可以當(dāng)你的代碼運(yùn)行在web worker.web worker 是運(yùn)行在后臺(tái)的 JavaScript,獨(dú)立于其他腳本,不會(huì)影響頁(yè)面的性能.
    所有主流瀏覽器均支持 web worker,除了 Internet Explorer。
  • wsh
    這個(gè)選項(xiàng)定義全局變量可以當(dāng)你的代碼運(yùn)行在Windows Script Host的運(yùn)行時(shí)環(huán)境
  • yui
    這個(gè)選項(xiàng)定義全局暴露的yui框架。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容