反引号和单引号在JavaScript中的区别

43

在使用Node.js(服务器端)时,我想知道是否应该始终使用反引号(`)而不是常规的引号(“或')来使代码风格一致。保留不同类型的引号是否有任何特定原因?如果所有非占位符引号都转换为反引号,这会影响性能吗?


2
黑色勾号,也称为模板字面量,除了用于封装字符串之外,还有多种用途。黑色勾号具有占位符、插值、多行字符串等功能。您可以根据项目需求决定哪些功能会有用。 - brk
2
@brk 我认为 OP 对反引号的作用非常清楚。他们正在询问在整个项目中使用所有反引号以保持代码一致性的影响是什么。 - alexisSchreier
3个回答

48

反引号(back-tick)允许你使用字符串模板,例如:

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

关于使用"',我建议查看这篇帖子:https://dev59.com/12kw5IYBdhLWcg3wV5ID#9959952

2018年更新:在某些情况下,ES6字符串模板可能比字符串拼接更快。查看以下帖子获取一些具体的数据:

ES6模板字面量是否比字符串拼接更快?

2020年更新:总的来说,当考虑使用哪种引号时,你不应该过于担心性能问题。尽管可能存在微小的差异,但正如许多人指出的那样,你最好优化代码而不是考虑使用哪个字符。话虽如此,这并没有真正回答一致性的问题。对我来说,我通常遵循Airbnb JavaScript风格指南。也就是说,字符串总是使用单引号(')声明,除非你需要构建一个字符串,然后你应该避免使用拼接,只使用带反引号(`)的字符串模板。最后,双引号留给JSON和HTML使用。


我知道没有一份指南能够让每个人都满意,但是AirBNB非常担心“代码可搜索性”(这实际上是“不允许长行连接”和“不允许不必要的转义符”的唯一原因),为什么不一直使用反引号呢?反引号使得转义引号变得不必要,而且我想对于AirBNB(以及几乎所有其他人)来说,在字符串中使用单/双引号比使用反引号更为常见。 - jmorganmartin
1
如果我必须猜测的话,我会说这是因为大多数打字员发现按引号键比按反引号键更容易、更自然。虽然这可能对实际节省的成本微不足道,但取悦我们这些善变的程序员也意味着很多。我讨厌要去按反引号键,我很高兴我们只在模板中使用它。 - iamtheddrman

21

使用反引号或单引号创建字符串的性能差异是如此微小,以至于我认为您不应该考虑将其作为使用其中一个的原因。 这里有一些基本证据

但是-我会建议不在非模板字符串中使用模板字符串,因为使用单引号时很明显不会发生模板化。如果我看到带有反引号的字符串-我会立即开始寻找将要替换什么或为什么使用它们。相比之下,单引号非常清晰明了。

我不认为它会影响性能-但我也不认为您应该“只是为了保持一致”而这样做。它并不一致,因为它是完全不同的构造-就像whilefor循环一样。他们是不同的工具,适用于不同的任务。


4
这是唯一实际回答了问题“精神”的答案! - BIOStheZerg
@BIOStheZerg 谢谢您的注意。我对解释什么是模板字符串的答案感到困惑,尤其是因为提问者显然已经知道了...我不知道他为什么会接受其中一个答案。 - Shadow

8

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

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

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


对我来说,这个答案很精确且更易于理解。 - hxin
9
我理解了这一部分,但这不是我要问的。我的问题是在 x = \test`x = 'test' (其中没有涉及变量转换)之间是否存在性能差异?如果没有区别,那最好在整个代码中始终使用反引号()以保持一致性和可维护性。 - Ulysses

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接