关于jshint的配置JSHint默认使用用户当前目录下的.jshintrc文件(json格式)作为配置文件在package.json中添加标签,手动配置;"jshintConfig":{"undef":true,"unused":true,"predef":["MY_GLOBAL","ads"]}使用.jshintrc文件;jshint会从当前路径开始,逐层查找/**ExampleConfiguration**/{"sub":true,"laxbreak":true,"laxcomma":true,"regexp":true,"asi":真,“浏览器”:真,“loopfunc”:真,“expr”:真,“节点”:真,“es5”:真,“esnext”:真,“按位”:真,“卷曲”:真,"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以冒号分隔的值列表。例如,以下代码片段将启用有关未定义和未使用变量的警告,并告诉JSHint将全局变量命名为MY_GLOBAL。/*jshintundef:true,unused:true*//*globalsMY_GLOBAL*/JSHint可以单行配置也可以多行配置,如果放在函数中,只会影响函数。ignore告诉jshint忽略一段代码//此处的代码将被JSHint检测。/*jshintignore:start*///此处的代码将被JSHint忽略。/*jshintignore:end*/以上代码在jshint中ignore:start和ignore:end之间的所有代码都会被JSHint忽略;或者忽略一行:ignoreThis();//上面的jshintignore:line只是一个例子,如果要用的话,去看文档吧,orz-_-|||JSHint配置文件中有3种类型的规则:Enforcing:这些规则设置为true,JSHint将更严格地检查代码。Relaxing:这些规则设置为true,JSHint将容忍规则中定义的条件。Environment:如果这些规则设置为true,JSHint会认为代码默认有一些全局变量。1.验证选项:强制按位禁用按位运算符。按位运算符在JavaScript中很少使用,&&经常被误写为&。按位:truecamelcase警告:此选项已弃用,将在JSHint的下一个主要版本中删除。该选项可以强制所有变量名使用驼峰式或UPPER_CASE使用下划线。camelcase:true/falsecurly循环或条件语句必须用花括号括起来。此选项要求您始终将大括号放在块循环和条件中。当JavaScript块只包含一条语句时,可以省略括号,例如:while(day)shuffle();但是,在某些情况下,它可能会导致错误(您可能认为sleep()是循环的一部分,而实际上它不是)while(day)shuffle();睡觉();enforceall警告:此选项已弃用,将在JSHint的下一个主要版本中删除。它启用所有强制选项并禁用所有放松选项;eqeqeq设置为true,禁止使用这个选项==和!=,强制使用===和!==。eqeqeq:truees3警告:此选项将在JSHint的下一个主要版本中删除,请改用esversion:3。使用ECMAScript3规范。使用此选项主要是为了与下层浏览器IE6/7/8/9和其他旧版JavaScript环境兼容。es5警告:此选项将在JSHint的下一个主要版本中删除,请改用esversion:5。此选项启用ECMAScript5.1规范中定义的语法,其中包括允许保留关键字作为对象属性。esversion该选项用于指定代码必须遵循的ECMAScript版本。它可以采用以下值之一:3--如果您需要在旧版浏览器(如InternetExplorer6/7/8/9)和其他遗留JavaScript环境中执行程序5--使语法首先按照ECMAScript5.1中的定义规格。这包括允许保留关键字作为对象属性。6--告诉JSHint代码使用ECMAScript6特定语法。请注意,并非所有浏览器都实现它们。forin此选项需要所有forin循环过滤器对象的项目。他允许在声明中遍历对象所有属性的名称,包括通过原型链继承的属性。for(keyinobj){if(obj.hasOwnProperty(key)){//我们确定obj[key]属于对象,不被继承。}}freeze这个选项禁止重写原始对象的原型这样作为数组、日期等funcscope禁止外部访问内部声明的变量functiontest(){if(true){varx=0;}x+=1;//Default:'x'usedoutofscope.//当funcscope:true时没有警告}futurehostile允许对在未来的js版本中定义的标识符发出警告。globals选项可用于指定未正式定义的全局变量的白名单。要在单个文件中配置全局变量,请参阅内联配置。即时警告:此选项已弃用,将在JSHint的下一个主要版本中删除。需要直接调用的函数必须用括号括起来,如:(function(){}());缩进警告:这个选项将在JSHint的下一个主要版本中被删除。将代码缩进长度设置为迭代器会抑制有关迭代器属性的警告。并非所有浏览器都支持此属性,因此请谨慎使用。latedef禁止在定义前使用变量。将此选项设置为“nofunc”将允许忽略函数声明。maxcomplexity设置代码文件独立线性路径检测的最大复杂度。maxdepth设置代码的最大嵌套深度。//jshintmaxdepth:2functionmain(meaning){varday=true;if(meaning===42){while(day){shuffle();if(tired){//JSHint:块嵌套太深(3).sleep();}}}}maxerr设置JSHint的最大警告数。默认50maxlen警告:这个选项将在JSHint的下一个主要版本中删除设置最大行数maxparams这个选项允许你设置每个函数的最大形式参数数//jshintmaxparams:3functionlogin(request,onSuccess){//。..}//JSHint:Toomanyparametersperfunction(4).functionlogout(request,isManual,whereAmI,onSuccess){//...}maxstatements此选项允许您设置语句允许的最大语句数://shintmaxstatements:4functionmain(){vari=0;varj=0;//函数声明算作一个语句。它们的主体//不考虑外部函数。functioninner(){vari2=1;varj2=1;returni2+j2;}j=i+j;returnj;//JSHint:每个函数的语句太多。(5)}函数也是一个语句。newcap警告此选项已弃用,并将在JSHint的下一个主要版本中删除,要求所有构造函数使用新的F()形式。noarg禁用此选项arguments.caller和arguments.callee。这两个.caller和.callee将被弃用。事实上,ECMAScript5严格模式禁止使用arguments.calleenocomma选项的逗号运算符。noempty警告此选项已弃用,将在JSHint的下一个主要版本中删除。空代码块警告。nonbspnonewlinespacewarningnonew这个选项禁止使用新的构造函数。有些人喜欢调用构造函数,但不分配给任何对象:newMyConstructor();notypeof检查无效的typeof运算符的值//'fuction'而不是'function'if(typeofa=="function"){//无效的typeof值'fuction'//...}隐式全局变量引号为predef扩展警告此选项已弃用,并将在JSHint的下一个主要版本中删除。此选项强制在代码中使用引号的一致性。它接受三个值:true——代码字符串禁止单引号和双引号混用,“single”——只允许单引号,“double”——只允许双引号。影子检查变量的重复定义。它接受4个值:"inner"只检查它是否在同一范围内重复定义"outer"检查外部范围falsetrue因为inne允许变量覆盖singleGroups禁止使用分组运算符//jshintsingleGroups:truedelete(obj.属性);//警告:不必要的分组operator.strictECMAScript5strictmode"global"-全局级别的严格模式"usestrict";“隐含”——在文件中使用“usestrict”;false-禁止使用strict模式true-必须在函数之上使用“usestrict”;undef变量未定义//jshintundef:truefunctiontest(){varmyVar='Hello,World';//糟糕,这里打错了。JSHintwithundefwillcomplainconsole.log(myvar);}你可以使用全局指令告诉JSHint你的变量是否在另一个文件中定义。unusedvariabledefinitionunused//jshintunused:truefunctiontest(a,b){varc,d=2;returna+d;}test(1,2);//第3行:'b'已定义但从未使用.//Line4:'c'wasdefinedbutnever当usedvarstmt设置为true时,禁止使用var声明变量//jshintvarstmt:truevara;//警告:禁止使用var声明。使用let或constinstead.2。Relaxing选项:当Relaxing设置为true时,这些选项会导致代码JSHint产生更少的警告。asi抑制缺少分号警告boss禁止比较表达式的值不符合预期的警告。通常,代码if(a=10){}是错误的,但是使用for(vari=0,person;person=people[i];i++){}可以抑制此错误,例如for(vari=0,person;(person=people[i]);i++){}debugignoredebuggerelision告诉JSHint代码使用带有省略元素或空元素的ES3数组(例如,[1,,,4,,,7]).eqnull不允许==null比较。通常这在你想检查一个变量是否为null或undefineddeqnull时更有用警告这个选项将被esversion取代:6在JSHint的下一个主要版本中使用ECMAScript6特定的语法,一些浏览器不支持邪恶禁止使用evalexpr禁止使用表达式一般情况下,使用函数调用。globalstrict将在下一个版本中被strict:"global"取代。全局严格模式会和第三方widgets冲突,所以不推荐。lastemic检查一行代码的最后一个语句后的分号是否丢失varname=(function(){return'Anton'}());laxbreak检查不安全的中断(将在下一版本中删除)laxcomma检查代码行中的逗号最重要的编程风格varobj={name:'Anton',handle:'valueof',role:'SWEngineer'};loopfunc禁止内循环,定义函数的内循环可能会导致这样的错误:varnums=[];for(vari=0;i<10;i++){nums[i]=function(j){returni+j;};}nums0;//打印12而不是2来解决上面的代码,你需要复制变量i:varnums=[];for(vari=0;i<10;i++){(function(i){nums[i]=function(j){returni+j;};}(i));}mozJSHintMozilla扩展。除非您专门为Firefox网络浏览器开发,否则您不需要此选项。multistr将在下一个版本中删除。此选项抑制多行字符串的警告。在JavaScript中允许多行字符串是危险的,如果你不小心在转义字符()和换行符之间放置一个空格,它会导致整个字符串出错。请注意,即使此选项正确允许多行字符串,它仍然会警告多行字符串之间没有转义字符或带有任何转义字符和空格。//jshintmultistr:truevartext="Hello\World";//所有good.text="HelloWorld";//警告,不可转义character.text="Hello\World";//警告,\noyield后有一个空格检查函数生成器没有yield语句plusplusforbidsuseunaryincrementanddecrementoperatorsprotoforbidswarningabout__proto__attributescripturlforbidsuseofscripturlorientation,suchasjavascript:...subwill在下一个版本中被删除check[]可以用来代替[]person['name']vs.person.name.supernew来检查奇怪的构造newfunction(){...}和newObject;这种构造有时用于JavaScript中的单列:varsingleton=newfunction(){varprivateVar;this.publicMethod=function(){}this.publicMethod2=function(){}};validthis注意:您只能在非构造函数的函数范围内使用此选项thiswithstmt检查withusage语句。with语句可能会在开发人员和意外的全局变量定义之间造成混淆。3.环境选项:Environment这些选项让JSHint知道一些预定义的全局变量。browser暴露了浏览器属性的全局变量,如window、document;注意:此选项不会公开变量警报或控制台。browserify选项定义了全局变量。使用时,可以使用Browserify工具来创建项目。couch选项定义了CouchDB的全局曝光。CouchDB是一个面向文档的数据库,可以通过MapReduce进行查询和索引。使用JavaScriptdevel选项定义全局变量,通常用于日志调试:console、alert等dojo选项定义全局暴露的DojoToolkit.jasmine该选项定义全局Exposejasmine的单元测试框架.jquery该选项定义jQuery库即在全球范围内暴露。mocha选项定义了全局公开的“BDD”和“TDD”uimocha单元测试框架。模块选项告诉JSHint输入代码描述了一个ECMAScript6模块。所有模块代码都被解释为严格模式代码。mootools选项定义了全局公开的MooToolsJavaScript框架。node这个选项定义了当你的代码在节点运行时环境中运行时可以使用的全局变量prototypejs此选项定义全局公开的prototypejs框架。qunit选项定义了对QUnit单元测试框架rhino的全局暴露该选项定义了当您的代码在Rhino运行时环境中运行时可以使用的全局变量。Rhino是完全用Java编写的JavaScript的开源实现。shelljs这个选项定义了全局暴露的ShellJS库typed这个选项定义了全局变量数组类型构造函数。worker选项定义了当您的代码在webworker中运行时可以使用的全局变量。WebWorker是在后台运行的JavaScript,独立于其他脚本,不会影响页面性能。除了InternetExplorer,所有主流浏览器都支持WebWorker。wsh选项定义了当您的代码在Windows脚本宿主运行时环境中运行时可以使用的全局变量。yui选项定义了全局公开的yui框架。
