为什么引入新的JSLint错误“使用空格,而不是制表符”和“不安全的字符”?
我已经使用JSLintvalidation我的JavaScript大约2年了,偶尔会有规则发生变化。 一般来说,当JSLint引入一个新的规则时,有一个checkbox可以在parsing时忽略这个规则,或者如果你select不忽略它,那么使你的代码符合它。
正如我今天正在运行我的JSLintvalidation,但是,我碰到这两个新的错误:
使用空格,而不是标签。
这不是“混合标签和空格”错误。 我只使用标签。 这是最近修改版本的“标签和空格的混合”,现在一般不允许标签。
和:
不安全的字符。
* /
不安全的字符。
_const:{
没有新的select可以忽略。 我不明白什么是不安全的closures块注释,为什么它认为_const:{因为不安全,当我有nomen: true
,(dangling _在标识符)或为什么我应该突然从空间切换到标签,当我仍然有关于4个空格的缩进的configuration是一个选项卡。
有没有人有一个想法,为什么这些被引入到至less如何使JSLint忽略这些新的规则?
更新: Messy White Space
选项解决问题,但它会导致其他意外的行为:
if (condition) { // ^-- there is a space but it won't indicate an error
看起来道格拉斯·克罗克福德(Douglas Crockford)看起来让很多人转向了JSHint。 看看这个提交 。
“混合空格和制表符”错误已被删除,并且在其位置添加了一个新的“使用空格而不是制表符”错误。 除此之外,这个差异有一个微小的变化,显示了这个原因。 以下行(已添加评论):
at = source_row.search(/ \t/); // ^ Space
已被replace为:
at = source_row.search(/\t/); // ^ No space!
在search之后有一个if
语句。 如果条件评估为true
,则发出“使用空格而不是制表符”警告。 这是这样的陈述:
if (at >= 0) { warn_at('use_spaces', line, at + 1); }
我希望这只是Crockford的一点小小的疏忽。 正如你所看到的,如果你在任何地方使用制表符,JSLint现在会提出这个警告。 不幸的是,他的提交信息是完全没有用的,文档也没有被更新,所以除了推测这个改变的原因之外,我什么也做不了。
我build议你放弃JSLint,然后切换到JSHint。
您可以通过单击“凌乱的空白区域”选项来抑制该错误。
根据您的编辑器/ IDE,您可以调整TAB的工作方式。
比如我用Sublime Text。 在右下angular附近有一个标签大小:4。
我点击它并将其设置为“使用空格缩进”。
这更新了所有我的标签使用空格和JSLint错误消失。 我尽量使用尽可能less的JSLint选项,因为我希望我的代码结构良好。
我也使用JSFormat,这将基于我的编辑器设置选项卡,所以每当我完成我运行我的JSFormat,然后JSLint。 没有错误=快乐的孩子!
希望能帮助到你。
为了回答为什么 JSLint现在给出了关于制表符的一个错误, http : //www.jslint.com/help.html给出了这个理由:
标签和空格不能混用。 我们应该select一个,以避免来自两者的问题。 个人喜好是一个非常不可靠的标准。 两者都不能提供强大的优势。 五十年前,标签具有消耗较less记忆的优势,但摩尔定律消除了这一优势。 空间与标签相比有一个明显的优势:标签代表多less空间没有可靠的标准,但空间占据一个空间是普遍接受的。 所以使用空格。 如果必须,可以使用制表符进行编辑,但在提交之前再次确保它是空格。 也许有一天我们终于会得到一个制表符的通用标准,但直到那一天,更好的select是空间。
从本质上讲,他希望每个人都能就是否使用制表符或空格来防止它们混合起来达成共识。 他决定,空间宽度的一致性使它成为最好的select,所以我们都应该使用它。 显然有些人会不同意这个思路(包括我自己),但这就是JSLint抛出这个错误的原因。