Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 对JSHint选项的工作方式感到困惑 问题_Node.js_Jshint - Fatal编程技术网

Node.js 对JSHint选项的工作方式感到困惑 问题

Node.js 对JSHint选项的工作方式感到困惑 问题,node.js,jshint,Node.js,Jshint,我制作了一个示例JavaScript文件来说明我的困惑 (function() { console.log(true == true); })() 这应该避免两个错误;首先是使用==而不是==,其次是缺少分号。然而,当我跑的时候 var jshint = require('jshint').JSHINT; jshint('(function() { console.log(true == true); })()'); 在节点REPL中,当我不希望出现错误时,会出现错误。我希望没有错误的原因是

我制作了一个示例JavaScript文件来说明我的困惑

(function() { console.log(true == true); })()
这应该避免两个错误;首先是使用
==
而不是
==
,其次是缺少分号。然而,当我跑的时候

var jshint = require('jshint').JSHINT;
jshint('(function() { console.log(true == true); })()');
在节点REPL中,当我不希望出现错误时,会出现错误。我希望没有错误的原因是,在JSHint文档中,它说:

第二个参数[to jshint]是一个可选的选项对象,用于控制 JSHINT的操作。大多数选项都是布尔值:它们是 所有选项都是可选的,默认值为false

我希望这不会产生错误,因为我没有定义任何选项,所以所有选项都应该为false。意外行为的最后一个部分是设置选项似乎没有任何作用。对jshint的以下两个调用也会产生相同的错误:

var myFile = '(function() { console.log(true == true); })()';
jshint(myFile, {eqeqeq: false, asi: false});
jshint('/*jshint eqeqeq:false, asi:false */\n' + myFile);
问题:
我不确定JSHint选项是如何工作的,我很可能误解了文档。如果我知道上面调用的
jshint
或我的假设不正确,或者jshint确实有问题,我将不胜感激。

默认情况下,并非所有选项都处于关闭状态。在我们的文档中(http://www.jshint.com/docs/)您可以看到一些选项是“强制”和“放松”[1]。这意味着默认情况下会显示一些警告,您需要启用“放松”选项来关闭它们

现在,有了这些信息,让我们看看你的第二个问题:

/*jshint eqeqeq:false, asi:false */
(function () { console.log(true == true); })()
此代码将触发
==true
和缺少分号的不安全比较警告。您试图通过关闭两个选项EQEQ和asi来解决这个问题。前者设置为true时,需要在所有位置进行严格比较,并且默认情况下处于禁用状态,因此可以忽略它。您会收到一条警告,因为JSHint认为比较
==true/false/0/null
不安全,目前无法关闭该选项(例如,
a==b
不会有警告)[2]。后一个选项(asi)是一个轻松的选项,所以您实际上需要打开它来告诉JSHint,可以容忍缺少分号。因此,要使您的示例通过,您需要通过以下方式进行更改:

/*jshint asi:true */
(function () { console.log(true === true); }()
[1] -我理解这令人困惑。由于向后兼容性,我不能仅仅改变选项的工作方式,但我正在努力使其不那么混乱。我将在文档中添加每个选项的默认值


[2] -即将发布的1.0.0版本将允许您忽略代码中的任何警告,即使没有相应的命名选项

默认情况下,并非所有选项都处于关闭状态。在我们的文档中(http://www.jshint.com/docs/)您可以看到一些选项是“强制”和“放松”[1]。这意味着默认情况下会显示一些警告,您需要启用“放松”选项来关闭它们

现在,有了这些信息,让我们看看你的第二个问题:

/*jshint eqeqeq:false, asi:false */
(function () { console.log(true == true); })()
此代码将触发
==true
和缺少分号的不安全比较警告。您试图通过关闭两个选项EQEQ和asi来解决这个问题。前者设置为true时,需要在所有位置进行严格比较,并且默认情况下处于禁用状态,因此可以忽略它。您会收到一条警告,因为JSHint认为比较
==true/false/0/null
不安全,目前无法关闭该选项(例如,
a==b
不会有警告)[2]。后一个选项(asi)是一个轻松的选项,所以您实际上需要打开它来告诉JSHint,可以容忍缺少分号。因此,要使您的示例通过,您需要通过以下方式进行更改:

/*jshint asi:true */
(function () { console.log(true === true); }()
[1] -我理解这令人困惑。由于向后兼容性,我不能仅仅改变选项的工作方式,但我正在努力使其不那么混乱。我将在文档中添加每个选项的默认值


[2] -即将发布的1.0.0版本将允许您忽略代码中的任何警告,即使没有相应的命名选项

谢谢你非常透彻的回答。谢谢你非常透彻的回答。