### JSHint的选项配置

* asi
如果是真，JSHint会无视没有加分号的行尾，自动补全分号一直是Javascript很有争议的一个语法特性。默认，JSHint会要求你在每个语句后面加上分号，但是如果你认为自己理解了asi(automatic semicolon insertion)，你可以抛弃JSHint对分号的检查。

* bitwise
如果为真，JSHint会禁用位运算符Javascript允许位运算，但是他却没有整型，位运算符要把参与运算的数字从浮点数变为整数，并在运算后再转换回来。这样他们的效率就不如在别的语言中那么高。

* boss
很霸气的选项，如果为真，那么JSHint会允许在if，for，while里面编写赋值语句。一般来说，我们会在循环、判断等语句中加入值的比较来做语句的运行条件，有时候会把==错写成赋值的=，通常，JSHint会把这个认定为一个错误，但是开启这个选项的化，JSHint就不会检查判断条件中的赋值 ，你是boss，你说的算。

* curly
如果为真，JSHint会要求你在使用if和while等结构语句时加上{}来明确代码块。Javascript允许在if等结构语句体只有一句的情况下不加括号。不过这样做可能会让你的代码读起来有些晦涩。

* debug
如果为真，JSHint会允许代码中出现debugger的语句。不过建议你最好在检测代码前去掉debug的语句。

* eqeqeq
如果为真，JSHint会看你在代码中是否都用了===或者是!==，而不是使用==和!=。我们建议你在比较0，''(空字符)，undefined，null，false和true的时候使用===和!===。

* eqnull
如果为真，JSHint会允许使用"== null"作比较。== null 通常用来判断一个变量是undefined或者是null（当时用==，null和undefined都会转化为false）。

* evil
如果为真，JSHint会允许使用evaleval提供了访问Javascript编译器的途径，这有时很有用，但是同时也对你的代码形成了注入攻击的危险，并且会对debug造成一些困难。记住，Function构造函数也是另一个‘eval’，另外，当传入的参数是字符串的时候，setTimeout和setInterval也会类似于eval。

* forin
如果为真，那么，JSHint允许在for in 循环里面不出现hasOwnProperty，for in循环一般用来遍历一个对象的属性，这其中也包括他继承自原型链的属性，而hasOwnProperty可以来判断一个属性是否是对象本身的属性而不是继承得来的。

* immed
如果为真，JSHint要求匿名函数的调用如下：

```javascript

  (function(){//}());
  
```
而不是

```javascript

  (function(){//bla bla})();
  
```

* laxbreak
如果为真，JSHint则不会检查换行。Javascript会通过自动补充分号来修正一些错误，因此这个选项可以检查一些潜在的问题。

* maxerr
设定错误的阈值，超过这个阈值jshint不再向下检查，提示错误太多。

* newcap
如果为真，JSHint会要求每一个构造函数名都要大写字母开头。构造器是一种使用new运算符来创建对象的一种函数，new操作符会创建新的对象，并建立这个对象自己的this，一个构造函数如果不用new运算符来运行，那么他的this会指向全局对象而导致一些问题的发生

* noarg
如果为真，JSHint会禁止arguments.caller和arguments.callee的使用arguments对象是一个类数组的对象，它具有一个索引值。arguments.callee指向当前执行的函数（这个在ES5的严格模式中被禁用了），而arguments.caller指向调用当前函数的函数（如果有的话），并且，他并不是在所有的Javascript实现里面都有。

* noempty
如果为真，JSHint会禁止出现空的代码块（没有语句的代码块）。如果为真，JSHint会禁用构造器，以避免一些问题。在JSLint中会主动禁用构造器的方式以避免一些潜在问题，但其实很多构造器的使用并非有害，例如如下的调用
new JsUIWindow();//注意这个调用是没有把构造器的结果赋值给变量的
因此，我们需要使用构造器的时候可以禁用这个选项。

* nomen
如果为真，JSHint会禁用下划线的变量名。很多人使用_name的方式来命名他们的变量，以说明这是一个私有变量，但实际上，并不是，下划线只是做了一个标识。如果要使用私有变量，可以使用闭包来实现。

* onevar
如果为真，JSHint期望函数只被var的形式声明一遍。

* passfail
如果为真，JSHint会在发现首个错误后停止检查。

* plusplus
如果为真，JSHint会禁用自增运算和自减运算++和--可能会带来一些代码的阅读上的困惑。

* regexp
如果为真，JSHint会不允许使用.和[^...]的正则，因为这样的正则往往会匹配到你不期望的内容，并可能会应用造成一些危害。

* undef
如果为真，JSHint会要求所有的非全局变量，在使用前都被声明。如果你不在一个本地作用域内使用var的方式来声明变量，Javascript会把它放到全局作用域下面。这样会很容易引起错误。

* sub
如果为真，JSHint会允许各种形式的下标来访问对象。通常，JSHint希望你只是用点运算符来读取对象的属性（除非这个属性名是一个保留字），如果你不希望这样可以关闭这个选项。

* strict
如果为真，JSHint会要求你使用use strict;语法。Strict 模式是ES5里面的一个新特性，他允许你把一个程序或者函数放在一个“严格”的作用域中。可见Resig写的一篇关于严格模式的blog严格模式做了几件事情:
1、他可以捕获一些错误和异常
2、当我们进行一下“不安全”的操作时，他会抛异常，例如访问全局变量。
3、他会禁止你使用一些奇淫技巧，或者不良的代码编写。

* white
如果为true，JSHint会依据严格的空白规范检查你的代码。
