问题标签 [template-literals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
11156 浏览

javascript - 延迟执行 ES6 模板文字

我正在使用新的ES6 Template Literals功能,我想到的第一件事是String.format用于 JavaScript,所以我着手实现一个原型:

ES6小提琴

但是,模板文字在传递给我的原型方法之前会被评估。有什么办法可以编写上面的代码将结果推迟到动态创建元素之后?

0 投票
6 回答
22072 浏览

javascript - 不破坏缩进的多行字符串

根据这个 esdiscuss 讨论,在 ECMAScript 6 中可以定义多行字符串,而不必将字符串的后续行放在行的开头。

Allen Wirfs-Brock 的帖子包含一个代码示例:

有人可以解释如何实现这一目标吗?如何定义这个dontIndent东西以删除用于缩进的空格?

0 投票
1 回答
834 浏览

javascript - Javascript Es6 标记模板 - 何时使用 raw?什么时候煮熟用?

在研究了这个 Es6 标签模板示例之后:



我看到返回的是var yo = func(strings, raw, x, y, x + y);

我了解有关字符串文字和x y插入的值的基础知识。我不明白的是......何时使用字符串与何时使用原始字符串?由于该函数具有两个数组,并且用户无法控制告诉该函数何时使用 raw 以及何时使用cooked(strings)。

0 投票
3 回答
22937 浏览

javascript - 反引号调用函数

我不确定如何解释这一点,但是当我跑步时

在谷歌浏览器中,我得到类似的输出

为什么反引号调用 log 函数,为什么它会创建一个索引raw: Array[1]

Catgocat 在 JS 房间提出了问题,但除了一些关于模板字符串的问题之外,没有任何答案是有意义的,这些问题并不真正适合为什么会发生这种情况。

0 投票
24 回答
68701 浏览

javascript - ES6 模板文字可以在运行时替换(或重用)吗?

tl; dr:是否可以制作可重用的模板文字?

我一直在尝试使用模板文字,但我想我只是不明白,现在我感到沮丧。我的意思是,我想我明白了,但“它”不应该是它的工作方式,或者它应该如何得到。它应该变得不同。

我看到的所有示例(甚至标记的模板)都要求在声明时而不是运行时完成“替换”,这对我来说对于模板来说似乎完全没用。也许我疯了,但对我来说,“模板”是一个包含标记的文档,当你使用它时,它会被替换,而不是在你创建它时,否则它只是一个文档(即字符串)。模板与令牌一起存储为令牌,并且在您...评估时评估这些令牌。

每个人都举了一个类似的可怕例子:

这很好,但如果我已经知道了a,我会选择return 'Worthless asd'return 'Worthless '+a。重点是什么?严重地。好吧,关键是懒惰;更少的优点,更多的可读性。伟大的。但这不是模板!不是恕我直言。而 MHO 才是最重要的!恕我直言,问题在于模板在声明时被评估,所以,如果你这样做,恕我直言:

由于expletive没有声明,它输出类似My undefined template. 极好的。实际上,至少在 Chrome 中,我什至不能声明模板;expletive由于未定义,因此会引发错误。我需要的是能够在声明模板后进行替换:

但是我不明白这是怎么可能的,因为这些并不是真正的模板。即使你说我应该使用标签,不,它们也不起作用:

这一切都让我相信模板文字的名字非常糟糕,应该被称为它们的真正含义:heredocs。我想“字面意思”部分应该告诉我(如,不可变)?

我错过了什么吗?有没有(好的)方法来制作可重用的模板文字?


我给你,可重用的模板文字

这是一个天真的“助手”功能......

...使其“更好”。

我倾向于称它们为模板肠道,因为它们产生曲折感觉的区域。

0 投票
3 回答
42493 浏览

javascript - 模板字符串作为对象属性名称

为什么 JavaScript 不允许模板字符串作为对象属性键?例如,当我输入:

进入 NodeJS REPL,它会抛出一个SyntaxError带有“意外模板字符串”的长堆栈跟踪。然而,属性值很好,这并不出人意料。类似的错误发生在浏览器中,例如,Firebug 抛出一个SyntaxError带有“invalid property id”的错误。

“计算的属性名称”中允许使用模板字符串。例如,这在所有支持语法的浏览器中编译得非常好:

并创建对象{"bar1": "baz"}

为什么不允许模板字符串作为文字对象键?是出于性能原因吗?必须编译模板字符串,可能在运行时(如果我错了,请纠正我),这意味着每次遇到此对象时,解释器都必须计算对象名称。考虑到诸如“熟”模板字符串之类的因素,这似乎会变慢,尽管自 ES5 以来我们已经有了 getter 和 setter。Firefox 没有将此作为错误提及,这就是我发现它出乎意料的原因。将来某个时候会允许使用这种语法吗?

0 投票
1 回答
38 浏览

javascript - 标记模板中是否组合了兄弟替换?

考虑以下几点:

${123}${'abc'}相当于${123 + 'abc'}?_ 换句话说,是否将 ciblings 转换为${123 + 'abc'}幕后的格式?

另外,有人将如何在他们自己的标记模板函数中处理这种特定情况?

0 投票
1 回答
4172 浏览

javascript - ES6:创建 ASCII 字符串的错误字符转义序列

这是我的代码:

但是,我Bad character escape sequence从 Babel 收到。我试图结束:

\u0003

ascii变量中。我究竟做错了什么?

编辑:

结束了ascii = (eval('"\\u00' + padded + '"'));

0 投票
1 回答
64 浏览

node.js - 没有标志的 NodeJS 上的 ECMA 脚本 2015 (ES6)

根据这篇文章,许多 ES6 函数(特别是模板文字,正式称为“模板字符串”)默认启用。

在终端中输入了以下内容:

即使使用“--harmony”标志,模板文字也不会作为代码执行,而是被视为字符串。

我的版本如下:

任何建议将不胜感激。

0 投票
1 回答
20297 浏览

javascript - 如何在 ES6 中嵌套模板字符串?

prefer-template从 eslint 得到一个错误。对于解决方法,我将代码更改为在函数内部使用模板字符串,该模板字符串require嵌套在url函数内部,如下所示:

然而,这显然是一个错误。这是我之前使用的代码,在require函数内部连接一个加号而不是模板字符串。

是否可以定义嵌套的模板字符串?