Kon*_*nev 56 javascript jslint
我已经使用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
Jam*_*ice 72
好吧,看起来道格拉斯·克罗克福德只是让更多的人转向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);
}
我希望这只是克罗克福德的一点疏忽.如您所见,如果您在任何地方使用制表符,JSLint现在会提出此警告.不幸的是,他的提交信息完全没用,而且文档似乎没有更新,所以除了推测这个改变背后的原因之外我什么也做不了.
我建议你放弃的JSLint,并切换到JSHint现在.
为了回答JSLint现在给出选项卡错误的原因,http://www.jslint.com/help.html给出了这样的理由:
标签和空格不应混合使用.我们应该选择一个,以避免两者兼而有之的问题.个人偏好是一个非常不可靠的标准.两者都没有提供强大的优势.五十年前,Tab具有消耗更少内存的优势,但摩尔定律已经消除了这一优势.空间比制表符有一个明显的优势:制表符所代表的空格数量没有可靠的标准,但是空间占据空间是普遍接受的.所以使用空格.如果必须,可以使用制表符进行编辑,但在提交之前确保它是空格.也许总有一天我们会最终获得标签的通用标准,但直到那一天到来,更好的选择是空格.
基本上他希望每个人就是否使用标签或空格来防止它们混合达成共识.他决定空间宽度的一致性使其成为最佳选择,所以我们都应该使用它.很明显,有些人会不同意这种思路(包括我自己),但这就是JSLint抛出该错误的原因.
根据您的编辑器/ IDE,您可以调整TAB的工作方式.
例如,我使用Sublime Text.在右下角附近有一个标签大小:4.
我点击它并将其设置为"缩进使用空格".
这更新了我的所有选项卡以使用空格和JSLint错误消失.我尝试使用尽可能少的JSLint选项,因为我希望我的代码结构良好.
我也使用JSFormat,它将根据我的编辑器设置进行选项卡,所以每当我完成运行我的JSFormat,然后运行JSLint.没有错误=快乐的男孩!
希望能帮助到你.