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

IT技术 javascript string ecmascript-6 template-literals
2021-01-25 17:42:07

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

我应该更喜欢这个:

var str1 = 'this is a string';

在这个?

var str2 = `this is another string`;
4个回答

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

当然,这可能根本不会影响您,但仍然是:YAGNI除非您需要插值、多行文字或未转义的引号和撇号,否则不要使用模板文字。来自何时在 JavaScript 中使用双引号或单引号的大部分参数也结转。与往常一样,保持您的代码库一致,并在不需要特殊样式的情况下仅使用一种字符串文字样式。

投反对票,因为如果他还没有使用反引号(以及 ES6),OP 就不会问这个问题。最重要的是,您在建议两种引用风格时谈论一致性。您的答案似乎没有令人信服的论据,即不一直使用反引号,也没有强调使用一种与另一种的权衡。
2021-03-15 17:42:07
一致性 > YAGNI
2021-03-19 17:42:07
@EECOLOR 除了在 ES6 中引入的模板字符串之外,实际上没有特定于模板字符串的参数(这在 2018 年确实不再引人注目),每种引用样式的权衡都非常相同。这就是我链接另一个问题的原因 - 你可以在这个答案中找到一些明确说明的论点
2021-03-24 17:42:07

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

事实上,我什至可能会争辩说始终使用模板文字是好的:

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

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

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

然而,这些都是非常微弱的优势。但还是没有,所以我主要使用模板文字。

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

@spikyjt 我在回答这个问题时有一个 JSPerf,但我再也找不到了。一个快速的谷歌搜索虽然得到了相同的结果:medium.com/javascript-in-plain-english/...
2021-03-26 17:42:07
我相信这是最有用的答案,这正是我一直在寻找的。您是否有任何实际的统计数据/证据来支持您的说法,即字符串文字和没有插值的模板文字之间没有性能差异?此外,关于在需要撇号时使用单/双引号,我总是使用单引号并使用实际的右单引号字符作为撇号,即无论如何这通常更适合于表示文本字符串。
2021-04-01 17:42:07

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

我同意这一点 100%。此外,我更喜欢在任何一天保持一致而不是 YAGNI。
2021-03-30 17:42:07
因为字符串文字是 ' 和 "。看来您的意思是模板文字。
2021-03-31 17:42:07
如果投反对票,请发表评论!很想知道不使用字符串文字的原因
2021-04-12 17:42:07

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