60

我已经使用 JSLint 验证我的 JavaScript 大约 2 年了,偶尔会有一些规则发生变化。一般来说,当 JSLint 引入新规则时,有一个复选框可以在解析时忽略此规则,或者如果您选择不忽略它,则使您的代码符合它。

然而,当我今天运行 JSLint 验证时,我遇到了以下两个新错误:

使用空格,而不是制表符。

这不是“混合制表符和空格”错误。我只使用标签。这是“混合制表符和空格”的最近修改版本,现在一般不允许使用制表符。

和:

不安全的性格。

*/

不安全的性格。

_const: {

没有新的选择可以忽略。我无法理解关闭块注释的不安全之处,为什么它认为 _const: { 当我有nomen: true, 时不安全(在标识符中悬挂 _)或者为什么我应该突然从空格切换到制表符,当我仍然有关于缩进的配置时4 个空格是一个制表符。

有谁知道为什么将这些引入到至少如何使 JSLint 忽略这些新规则?

更新:Messy White Space选项可以解决该问题,但会导致其他意外行为:

if (condition) { 
  //            ^-- there is a space but it won't indicate an error
4

4 回答 4

77

好吧,看起来 Douglas Crockford 刚刚让更多的人转向 JSHint。看看这个提交

“混合空格和制表符”错误已被删除,并在其位置添加了一个新的“使用空格,而不是制表符”错误。除此之外,该差异中有一个微小的变化表明了造成这种情况的原因。以下行(添加评论):

at = source_row.search(/ \t/);
//                      ^ Space

已替换为:

at = source_row.search(/\t/);
//                      ^ No space!

在搜索之后有一个if声明。如果条件评估为true,则会发出“使用空格,而不是制表符”警告。这是该声明:

if (at >= 0) {
    warn_at('use_spaces', line, at + 1);
}

希望这只是 Crockford 的一个小小的疏忽。如您所见,如果您在任何地方使用制表符,JSLint 现在将发出此警告。不幸的是,他的提交信息完全没用,而且文档似乎没有更新,所以我只能猜测这个变化背后的原因。

我建议你现在放弃 JSLint 并切换到JSHint

于 2012-12-17T13:12:42.520 回答
13

您可以通过单击“混乱的空白”选项来抑制错误。

于 2012-12-31T16:05:42.600 回答
10

要回答为什么JSLint 现在给出关于选项卡的错误, http: //www.jslint.com/help.html给出了这个理由:

制表符和空格不应混用。我们应该只选择一个,以避免两者兼而有之的问题。个人喜好是一个极其不可靠的标准。两者都没有提供比另一个强大的优势。50 年前,tab 具有消耗更少内存的优势,但摩尔定律已经消除了这一优势。空格相对于制表符有一个明显的优势:制表符代表多少个空格没有可靠的标准,但普遍接受的是空格占用一个空格。所以使用空格。如果必须,您可以使用制表符进行编辑,但在提交之前请确保它再次是空格。也许有一天我们最终会得到一个标签的通用标准,但在那一天到来之前,更好的选择是空格。

从本质上讲,他希望每个人就是否使用制表符或空格来防止它们被混合达成共识。他认为空间宽度的一致性使其成为最佳选择,所以我们都应该使用它。显然有些人会不同意这种思路(包括我自己),但这就是 JSLint 抛出该错误的原因。

于 2015-11-04T19:08:27.617 回答
6

根据您的编辑器/IDE,您可以调整 TAB 的工作方式。

例如,我使用 Sublime Text。在右下角附近有一个标签大小:4。

我单击它并将其设置为“使用空格缩进”。

这更新了我所有的选项卡以使用空格,并且 JSLint 错误消失了。我尝试在 JSLint 中使用尽可能少的选项,因为我希望我的代码结构良好。

我还使用 JSFormat,它会根据我的编辑器设置进行选项卡,所以每当我完成时,我运行我的 JSFormat,然后运行 ​​JSLint。没有错误=快乐的男孩!

希望能帮助到你。

于 2013-09-20T17:46:49.600 回答