在没有模板化表达式的情况下使用 ES6 模板文字语法有缺点吗?

Is there a downside to using ES6 template literals syntax without a templated expression?

是否有理由(性能或其他)不对 javascript 源文件中的所有字符串使用反引号模板文字语法?如果有,是什么?

我应该更喜欢这个:

var str1 = 'this is a string';

超过这个?

var str2 = `this is another string`;

不使用它们的最重要原因是并非所有环境都支持 ES6。

当然,这可能根本不会影响您,但仍然:YAGNI. Don't use template literals unless you need interpolation, multiline literals, or unescaped quotes and apostrophes. Much of the arguments from When to use double or single quotes in JavaScript? 也会继续。一如既往,保持代码库一致,并在不需要特殊样式的地方仅使用一种字符串文字样式。

始终使用模板文字。在这种情况下,YAGNI 是不正确的。你绝对会需要它。在某些时候,您将向字符串添加一个变量或新行,此时您需要将单引号更改为反引号,或者使用可怕的“+”。

代码方面,没有具体的缺点。 JS 引擎足够聪明,在没有变量的字符串文字和模板文字之间没有性能差异。

事实上,我什至会争辩说总是使用模板字面量是好的:

  • 您已经可以使用单引号或双引号来构成字符串了。选择哪一个在很大程度上是任意的,你只需要坚持一个。但是,如果您的字符串包含您选择的字符串标记,我们鼓励您使用另一个引号,即如果您选择 ',您仍然会使用 "don't argue" 而不是 'don\'t argue'。但是,反引号在普通语言和字符串中很少见,因此您实际上很少需要使用其他字符串文字语法或使用转义码,这很好。

    例如,您将被迫使用转义序列来使字符串 she said: "Don't do this!" 带有双引号或单引号,但在使用反引号时则不必这样做。

  • 如果以后要在字符串中使用变量,则不必转换。

但是,这些都是非常薄弱的​​优势。但仍然超过 none,所以我主要使用模板文字。

一个真实但在我看来可以忽略的反对意见是必须支持不支持字符串文字的环境。如果你有这些,你就会知道并且不会问这个问题。

当这些值供外部使用时要小心。我们使用 Tealium 进行营销分析,它目前不支持 ES6 模板文字。包含模板文字或字符串模板的事件数据将导致 Tealium 脚本出错。