为什么新的JSLint错误"使用空格,而不是制表符"和"不安全的字符"被引入?

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
Run Code Online (Sandbox Code Playgroud)

Jam*_*ice 72

好吧,看起来道格拉斯·克罗克福德只是让更多的人转向JSHint.看看这个提交.

"混合空格和制表符"错误已被删除,并且在其位置添加了新的"使用空格,而非制表符"错误.除此之外,差异中的一个微小变化显示了原因.以下行(评论已添加):

at = source_row.search(/ \t/);
//                      ^ Space
Run Code Online (Sandbox Code Playgroud)

已被替换为:

at = source_row.search(/\t/);
//                      ^ No space!
Run Code Online (Sandbox Code Playgroud)

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

if (at >= 0) {
    warn_at('use_spaces', line, at + 1);
}
Run Code Online (Sandbox Code Playgroud)

希望这只是克罗克福德的一点疏忽.如您所见,如果您在任何地方使用制表符,JSLint现在会提出此警告.不幸的是,他的提交信息完全没用,而且文档似乎没有更新,所以除了推测这个改变背后的原因之外我什么也做不了.

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

  • 充分尊重,fu**空间. (103认同)
  • 是的,验证者必须在代码的每一行中指出制表符的使用,这是荒谬的.它会分散您的代码中的实际问题.另外,标签出了什么问题?! (2认同)

mat*_*us1 12

您可以通过单击"凌乱的空白区域"选项来抑制错误.

  • 我在问题的最后部分对此进行了解释.尾随空格会被忽略,它们不应该是, (6认同)

Kat*_*Kat 8

为了回答JSLint现在给出选项卡错误的原因,http://www.jslint.com/help.html给出了这样的理由:

标签和空格不应混合使用.我们应该选择一个,以避免两者兼而有之的问题.个人偏好是一个非常不可靠的标准.两者都没有提供强大的优势.五十年前,Tab具有消耗更少内存的优势,但摩尔定律已经消除了这一优势.空间比制表符有一个明显的优势:制表符所代表的空格数量没有可靠的标准,但是空间占据空间是普遍接受的.所以使用空格.如果必须,可以使用制表符进行编辑,但在提交之前确保它是空格.也许总有一天我们会最终获得标签的通用标准,但直到那一天到来,更好的选择是空格.

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

  • ...这是没有意义的.由于定义的宽度正是空间不一致的原因...因为有些人会使用2个空格,有些人会使用4个等等.所以有些文件缩进将是其他文件缩进的两倍.使用选项卡它只是1个选项卡==缩进,并且您的编辑器使用您的设置确定缩进被视为多远...并且每个使用选项卡的文件将为您显示完全相同.Tab是完美的占位符,用于说"它是1级缩进...无论你希望它对你的编辑器意味着多远",并且每个使用它的文件都会有完全相同的缩进. (20认同)

TyM*_*ayn 6

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

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

我点击它并将其设置为"缩进使用空格".

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

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

希望能帮助到你.

  • 大多数编辑器使用空格*缩进的选项的问题是你按一次"Tab",但必须按"退格"四次.我知道,没有一个编辑器可以将制表符作为单个实体正确处理. (16认同)
  • 但问题不在于解决方法。问题是,标签有什么问题?!为什么这值得在包含选项卡的每一行代码中提及!它会分散您对代码中实际问题的注意力!!事实上,我认为制表符更好,因为使用相同数量的制表符比空格更容易(更少的实际字符)并且文件占用更少的空间(制表符占用 1 个字节而不是 4 个字节),尽管这不是那么重要。 (2认同)