【问题标题】:Back-tick vs single quote in jsjs中的反引号与单引号
【发布时间】:2017-11-02 03:52:56
【问题描述】:

在node.js(服务器端)上工作,我想知道我是否应该一直使用所有反引号(`)而不是常规引号(“或'),因为它会使代码保持一致。有没有为不同的事物保留不同类型的引号的具体原因。如果所有非替换引号都转换为反引号,是否会影响性能?

【问题讨论】:

  • 黑色刻度也称为模板文字,除了包含一个字符串外,还有多种用途。黑色刻度带有诸如占位符、插值、多行字符串等功能。您可以根据项目要求决定哪个有用
  • @brk 我认为 OP 很清楚反勾号可以做什么。他们询问在项目范围内使用所有反引号以保持代码一致会有什么影响。

标签: javascript node.js backticks backquote


【解决方案1】:

反引号允许您使用字符串模板,例如:

var value = 4;
var str = `text with a ${value}`
// str will be  : 'text with a 4'

" vs ' 我说看看这个帖子:https://stackoverflow.com/a/9959952/6739517

至于性能,如果你只是对纯字符串使用反引号,它似乎是一样的。但是,在构建字符串时,看起来连接仍然是要走的路。看看这里:

2018 年更新:在某些情况下,ES6 字符串模板似乎比串联更快。看看下面的帖子,了解一些硬性数字:

Are ES6 template literals faster than string concatenation?

2020 年更新:一般来说,在考虑使用哪种类型的报价时,您不应该担心性能。可能会有微小的差异,但正如许多人所指出的那样,这些都是如此微小的改进,您最好优化代码而不是考虑使用哪个字符。也就是说,这并不能真正回答一致性问题。对我来说,我一般关注Airbnb's style guide。也就是说,字符串总是用单引号 (') 声明,除非您需要构建一个字符串,那么您应该避免串联,并且只使用带有反引号 (`) 的字符串模板。最后,为 JSON 和 HTML 保留双引号。

【讨论】:

  • 我知道没有能让所有人满意的单一指南,但与 AirBNB 一样担心的是“代码可搜索性”(字面上给出的唯一原因是:“没有长线连接”和“没有不必要的转义” "),为什么不一直使用反引号呢?反引号使转义引号变得不必要,我不得不想象字符串中的单引号/双引号比 AirBNB(以及几乎所有其他人)的反引号更常见。
  • @jmorganmartin 如果我不得不猜测,我会说这是因为大多数打字员发现到达引号键比反引号键更容易、更自然。虽然这对于底线的实际节省可能微不足道,但安抚我们善变的程序员也可能意味着很多。我讨厌我必须伸手去拿反引号,我很高兴我们只将它用于模板。
【解决方案2】:

使用反引号或单引号创建字符串之间的性能差异非常小,我认为您不应将其视为使用其中一个或另一个的理由。 Here is some basic evidence of that.

但是 - 我反对对不是模板的字符串使用模板字符串,因为很明显,当您使用单引号时,不会发生模板化。如果我看到一个带有反引号的字符串 - 我会立即开始寻找要替换的内容,或者为什么使用它们。相比之下,单引号就很清楚了。

我认为这不会影响性能 - 但我认为您也不应该“只是为了保持一致”而这样做。它并不一致,因为它是一个完全不同的构造——与whilefor 循环相同。它们是针对不同工作的不同工具。

【讨论】:

  • 这是唯一真正回答问题“精神”的答案!
  • @BIOStheZerg 感谢您的关注。我对解释模板字符串是什么的答案感到困惑,尤其是当被问者清楚地知道......不知道他接受了其中一个。
【解决方案3】:

反引号(``)被称为模板文字。它们是 ES6 的一部分。 区别在于:

var name = "world";
var greetES5 = 'Hello '+name;//using single quote
var greetES6 = `Hello ${name}`;//using ticks

您可以参考 MDN here 了解更多信息。

【讨论】:

  • 对我来说,这个答案准确且更容易理解。
  • 这部分我已经明白了,但这不是我问的。我的问题是x=`test`x = 'test'(不涉及变量转换)之间是否存在性能差异?如果没有区别,那么最好在整个代码中使用反引号 (`) 以保持一致性和可维护性。
猜你喜欢
  • 1970-01-01
  • 2010-10-08
  • 2011-09-17
  • 2012-12-13
  • 1970-01-01
  • 2021-08-07
  • 2014-04-11
  • 2012-04-25
  • 2012-12-30
相关资源
最近更新 更多