SHint介紹
翻譯自www.jshint.comJSHint(注意不是jslint:))是一個由javascript社區(qū)驅(qū)動開發(fā)的用于檢查javascript代碼錯誤和問題的工具,有了他,可以使你保持一個良好的編碼風(fēng)格。你可以很簡單的配置它以適應(yīng)你目前的一個編碼風(fēng)格。目前JSHint的源碼可以在github上面找到。
JSHint文檔
如何使用JSHint
JSHint是一個全局的函數(shù),他接受兩個參數(shù),JSHint(source,options);一個是代碼source,另一個是options(選項)第一個參數(shù)可以是一個字符串或者是一個字符串?dāng)?shù)組。如果是字符串,則他會被\n和\r分割,如果傳入的參數(shù)是數(shù)組,就要保證數(shù)組的每一項是一行代碼。因此源碼參數(shù)可以是javascript代碼或者是一個json形式。如果所有的檢測都o(jì)k,JSHint會返回true,否則就返回false。當(dāng)返回false的時候,你可以用JSHint.errors來獲取錯誤信息或者用JSHint.data()來獲取lint的信息。如果要了解更多,參見源代碼。使用JSHint,你可以在js文件的開始設(shè)定選項,例如
/*jshint evil:true, boss:true */
而設(shè)定global參數(shù)可以告訴JSHint,全局的變量配置。例如
/*global DISQUS: true, jQuery: false */
以上的這個例子是告訴JSHint,DISQUS是你自己聲明的全局變量,而jQuery是你引入的全局變量
JSHint和JSLint有什么區(qū)別?
JSHint是JSLint的一個分支(fork),他比JSLint更加的便捷。用來約束你的代碼質(zhì)量和編碼風(fēng)格。每個人都有不一樣的編碼習(xí)慣和風(fēng)格,JSHint通過配置可以適應(yīng)于各種情況。JSHint的適用環(huán)境
- 瀏覽器環(huán)境(browsers)
- Node.js
- jQuery
- ES5
- CouchDB
- Prototype.js
- Mootools.js
JSHint的選項配置
asi
如果是真,JSHint會無視沒有加分號的行尾,自動補全分號一直是Javascript很有爭議的一個語法特性。默認(rèn),JSHint會要求你在每個語句后面加上分號,但是如果你認(rèn)為自己理解了asi(automatic semicolon insertion),你可以拋棄JSHint對分號的檢查。
bitwise
如果為真,JSHint會禁用位運算符Javascript允許位運算,但是他卻沒有整型,位運算符要把參與運算的數(shù)字從浮點數(shù)變?yōu)檎麛?shù),并在運算后再轉(zhuǎn)換回來。這樣他們的效率就不如在別的語言中那么高。
boss
很霸氣的選項,如果為真,那么JSHint會允許在if,for,while里面編寫賦值語句。一般來說,我們會在循環(huán)、判斷等語句中加入值的比較來做語句的運行條件,有時候會把==錯寫成賦值的=,通常,JSHint會把這個認(rèn)定為一個錯誤,但是開啟這個選項的化,JSHint就不會檢查判斷條件中的賦值 ,你是boss,你說的算:)。
curly
如果為真,JSHint會要求你在使用if和while等結(jié)構(gòu)語句時加上{}來明確代碼塊。Javascript允許在if等結(jié)構(gòu)語句體只有一句的情況下不加括號。不過這樣做可能會讓你的代碼讀起來有些晦澀。
debug
如果為真,JSHint會允許代碼中出現(xiàn)debugger的語句。不過建議你最好在檢測代碼前去掉debug的語句。
eqeqeq
如果為真,JSHint會看你在代碼中是否都用了===或者是!==,而不是使用==和!=。我們建議你在比較0,''(空字符),undefined,null,false和true的時候使用===和!===。
eqnull
如果為真,JSHint會允許使用"== null"作比較。== null 通常用來判斷一個變量是undefined或者是null(當(dāng)時用==,null和undefined都會轉(zhuǎn)化為false)。
evil
如果為真,JSHint會允許使用evaleval提供了訪問Javascript編譯器的途徑,這有時很有用,但是同時也對你的代碼形成了注入攻擊的危險,并且會對debug造成一些困難。記住,F(xiàn)unction構(gòu)造函數(shù)也是另一個‘eval’,另外,當(dāng)傳入的參數(shù)是字符串的時候,setTimeout和setInterval也會類似于eval。
forin
如果為真,那么,JSHint允許在for in 循環(huán)里面不出現(xiàn)hasOwnProperty,for in循環(huán)一般用來遍歷一個對象的屬性,這其中也包括他繼承自原型鏈的屬性,而hasOwnProperty可以來判斷一個屬性是否是對象本身的屬性而不是繼承得來的。
immed
如果為真,JSHint要求匿名函數(shù)的調(diào)用如下:
(function(){//}());
而不是
(function(){//bla bla})();
laxbreak
如果為真,JSHint則不會檢查換行。Javascript會通過自動補充分號來修正一些錯誤,因此這個選項可以檢查一些潛在的問題。
maxerr
設(shè)定錯誤的閾值,超過這個閾值jshint不再向下檢查,提示錯誤太多。
newcap
如果為真,JSHint會要求每一個構(gòu)造函數(shù)名都要大寫字母開頭。構(gòu)造器是一種使用new運算符來創(chuàng)建對象的一種函數(shù),new操作符會創(chuàng)建新的對象,并建立這個對象自己的this,一個構(gòu)造函數(shù)如果不用new運算符來運行,那么他的this會指向全局對象而導(dǎo)致一些問題的發(fā)生。
noarg
如果為真,JSHint會禁止arguments.caller和arguments.callee的使用arguments對象是一個類數(shù)組的對象,它具有一個索引值。arguments.callee指向當(dāng)前執(zhí)行的函數(shù)(這個在ES5的嚴(yán)格模式中被禁用了),而arguments.caller指向調(diào)用當(dāng)前函數(shù)的函數(shù)(如果有的話),并且,他并不是在所有的Javascript實現(xiàn)里面都有。
noempty
如果為真,JSHint會禁止出現(xiàn)空的代碼塊(沒有語句的代碼塊)。如果為真,JSHint會禁用構(gòu)造器,以避免一些問題。在JSLint中會主動禁用構(gòu)造器的方式以避免一些潛在問題,但其實很多構(gòu)造器的使用并非有害,例如如下的調(diào)用
new? JsUIWindow ();//注意這個調(diào)用是沒有把構(gòu)造器的結(jié)果賦值給變量的
因此,我們需要使用構(gòu)造器的時候可以禁用這個選項。
nomen
如果為真,JSHint會禁用下劃線的變量名。很多人使用_name的方式來命名他們的變量,以說明這是一個私有變量,但實際上,并不是,下劃線只是做了一個標(biāo)識。如果要使用私有變量,可以使用閉包來實現(xiàn)。
onevar
如果為真,JSHint期望函數(shù)只被var的形式聲明一遍。
passfail
如果為真,JSHint會在發(fā)現(xiàn)首個錯誤后停止檢查。
plusplus
如果為真,JSHint會禁用自增運算和自減運算++和--可能會帶來一些代碼的閱讀上的困惑。
regexp
如果為真,JSHint會不允許使用.和[^...]的正則,因為這樣的正則往往會匹配到你不期望的內(nèi)容,并可能會應(yīng)用造成一些危害。
undef
如果為真,JSHint會要求所有的非全局變量,在使用前都被聲明。如果你不在一個本地作用域內(nèi)使用var的方式來聲明變量,Javascript會把它放到全局作用域下面。這樣會很容易引起錯誤。
sub
如果為真,JSHint會允許各種形式的下標(biāo)來訪問對象。通常,JSHint希望你只是用點運算符來讀取對象的屬性(除非這個屬性名是一個保留字),如果你不希望這樣可以關(guān)閉這個選項。
strict
如果為真,JSHint會要求你使用use strict;語法。Strict 模式是ES5里面的一個新特性,他允許你把一個程序或者函數(shù)放在一個“嚴(yán)格”的作用域中。可見Resig寫的一篇關(guān)于嚴(yán)格模式的blog嚴(yán)格模式做了幾件事情:
1、他可以捕獲一些錯誤和異常
2、當(dāng)我們進(jìn)行一下“不安全”的操作時,他會拋異常,例如訪問全局變量。
3、他會禁止你使用一些奇淫技巧,或者不良的代碼編寫。
white
如果為true,JSHint會依據(jù)嚴(yán)格的空白規(guī)范檢查你的代碼。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
