为啥 JSLint 要我使用双引号而不是单引号?预期为 '"' 而看到的是 '''

Posted

技术标签:

【中文标题】为啥 JSLint 要我使用双引号而不是单引号?预期为 \'"\' 而看到的是 \'\'\'【英文标题】:Why is JSLint wanting me to use double quotes instead of single quotes? Expected '"' and instead saw '''为什么 JSLint 要我使用双引号而不是单引号?预期为 '"' 而看到的是 ''' 【发布时间】:2017-01-07 05:42:02 【问题描述】:

我最近开始看到 JSLint 发出以下警告:

JSLint:预期为 '"',但看到的是 '''。

换句话说,它希望我使用双引号而不是单引号。为什么 JSLint 会警告我?单引号和双引号在 javascript 中是否或多或少可以互换,仅取决于程序员的偏好?

【问题讨论】:

【参考方案1】:

JSLint 的2016-02-07 version 更改为更喜欢双引号而不是单引号。 Douglas Crockford,JSLint 开发者和有影响力的 JavaScript 和 JSON 开发者,provided this rationale:

当我第一次遇到 JavaScript 时,[原文如此] 很惊讶它有两种引号,我试图理解它,使用单引号表示内部文本,使用双引号表示外部文本。

但最终我意识到,当只需要一个时,由于拥有两个而造成的混乱和混乱是不值得的。我决定使用 double 因为这是 JSON 使用的,它避免了由撇号重载引起的错误。我被那个咬了。

总的来说,我正在寻找使语言更小更好的方法。引号与 null & undefined 属于同一类。我们真的不需要两者。

我在自己的一些代码上进行了尝试,我认为这是一种改进。最终,我可能会将 option.single 添加到 JSLint。

这确实发生了:option.single 已添加到 JSLint 的 2016-06-09 version 中,因此您现在可以告诉 JSLint 选择性地忽略单引号。

Crockford 更简洁地重申了他在 a later discussion 中使用双引号而不是单引号的理由:

我发现人们在管理这两种报价时有些困难。由于第二组完全没有必要,而且由于第二组 [单引号] 会带来问题和混乱,我现在建议只使用双引号。

【讨论】:

你知道 Crockford 所指的单引号有什么问题吗? @DustinHodges 我看到有人在第一句话中询问他的“超载撇号”评论,他举了alert( 'Don't try this!'); 的例子。我认为他的意思是撇号既用于英语单词的正确拼写,又用于 JavaScript 中的语法标记。到目前为止,我还没有发现任何关于他可能暗示的其他问题。 @DustinHodges 是的,但没有任何英文单词中有引号。句子是,但不是单词。 确实如此。我可以理解他为什么选择只使用双引号,但你只是用一个问题来换取一个可能发生率较低的等效问题。我只是对 Crockford 说没有进一步解释就不需要单引号感到困扰,因为我可以提出不需要双引号的相同论点。 @DustinHodges - 克罗克福德先生是个聪明人,但他四分之三的建议归结为“因为我这么说”,而且他倾向于将所有事情都解释为非黑即白尽管他只是在发表自己的意见 - 多年来,他已经改变了对这个问题和其他几个问题的看法。【参考方案2】:

这是一个非常自以为是的工具发出的垃圾邮件警告,没有充分的理由。

旧的 lint 工具(JSLint 和 JSHint)已被 ESLint 完全取代,它支持更多规则并允许您配置您真正感兴趣的选项。具体来说,quotes rule 允许您选择单个、加倍,或完全忽略引用。

【讨论】:

这实际上并没有回答为什么 JSLint 会抛出这个警告的问题。 @Thunderforge 它确实:“这是来自一个非常固执的工具的垃圾邮件警告。”这没有充分的理由,这纯粹是一个非常古老的工具及其作者的偏好。 @Thunderforge:您的回答引用 Crock(ford) 的话说 "...我决定使用 double ,因为这是 JSON 使用的,它避免了由撇号过载引起的错误。” 我认为这完全支持了 ssube 的断言,即 “这是一个非常自以为是的工具发出的垃圾邮件警告,没有充分的理由。” -(int)PI/3:这是一个非常固执的用户的垃圾邮件回答,没有充分的理由。说真的,如何说“旧工具”已被“完全取代”不是自以为是的垃圾邮件?

以上是关于为啥 JSLint 要我使用双引号而不是单引号?预期为 '"' 而看到的是 '''的主要内容,如果未能解决你的问题,请参考以下文章

php中单引号和双引号的区别,哪个速度更快?为啥?

单引号而不是双引号?

何时使用三重单引号而不是三重双引号

使用双引号而不是单引号返回 Python 列表中的变量

为啥双引号会变成单引号

为啥双引号变单引号了?