我已经使用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
答案 0 :(得分:72)
看起来道格拉斯·克罗克福德只是让更多的人转向JSHint。看看this commit。
已删除“混合空格和制表符”错误,并在其位置添加了新的“使用空格,而非制表符”错误。除此之外,差异中的一个微小变化显示了原因。以下行(添加评论):
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。
答案 1 :(得分:12)
您可以点击“凌乱的空格”选项来抑制错误。
答案 2 :(得分:7)
要回答为什么 JSLint现在提供有关标签的错误,http://www.jslint.com/help.html给出了这样的理由:
标签和空格不应混合使用。我们应该只选择一个 避免两者兼而有之的问题。个人喜好 是一个非常不可靠的标准。两者都没有强大的功能 优势超过另一个。五十年前,tab具有优势 消耗更少的记忆,但摩尔定律已经消除了这一优势。 与tab相比,Space有一个明显的优势:没有可靠的标准 一个标签代表多少空格,但它被普遍接受 一个空间占据一个空间。所以使用空格。您可以使用标签进行编辑 如果必须,但在提交之前确保它是空格。也许 有一天,我们终于会获得制表符的通用标准,但直到 那一天到来,更好的选择是空间。
基本上,他希望每个人就是否使用制表符或空格来防止它们混合达成共识。他决定空间宽度的一致性使其成为最佳选择,因此我们都应该使用它。很明显,有些人会不同意这种思路(包括我自己),但这就是JSLint抛出错误的原因。
答案 3 :(得分:6)
根据您的编辑器/ IDE,您可以调整TAB的工作方式。
例如,我使用Sublime Text。 在右下角附近有一个标签大小:4。
我点击它并将其设置为'缩进使用空格'。
这更新了我的所有选项卡以使用空格和JSLint错误消失。我尝试使用尽可能少的JSLint选项,因为我希望我的代码结构良好。
我也使用JSFormat,它将根据我的编辑器设置进行选项卡,所以每当我完成运行我的JSFormat,然后运行JSLint。没有错误=快乐的男孩!
希望它有所帮助。