问题标签 [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.
javascript - 延迟执行 ES6 模板文字
我正在使用新的ES6 Template Literals功能,我想到的第一件事是String.format
用于 JavaScript,所以我着手实现一个原型:
但是,模板文字在传递给我的原型方法之前会被评估。有什么办法可以编写上面的代码将结果推迟到动态创建元素之后?
javascript - 不破坏缩进的多行字符串
根据这个 esdiscuss 讨论,在 ECMAScript 6 中可以定义多行字符串,而不必将字符串的后续行放在行的开头。
Allen Wirfs-Brock 的帖子包含一个代码示例:
有人可以解释如何实现这一目标吗?如何定义这个dontIndent
东西以删除用于缩进的空格?
javascript - Javascript Es6 标记模板 - 何时使用 raw?什么时候煮熟用?
在研究了这个 Es6 标签模板示例之后:
我看到返回的是var yo = func(strings, raw, x, y, x + y);
我了解有关字符串文字和x
y
插入的值的基础知识。我不明白的是......何时使用字符串与何时使用原始字符串?由于该函数具有两个数组,并且用户无法控制告诉该函数何时使用 raw 以及何时使用cooked(strings)。
javascript - 反引号调用函数
我不确定如何解释这一点,但是当我跑步时
在谷歌浏览器中,我得到类似的输出
为什么反引号调用 log 函数,为什么它会创建一个索引raw: Array[1]
?
Catgocat 在 JS 房间提出了问题,但除了一些关于模板字符串的问题之外,没有任何答案是有意义的,这些问题并不真正适合为什么会发生这种情况。
javascript - ES6 模板文字可以在运行时替换(或重用)吗?
tl; dr:是否可以制作可重用的模板文字?
我一直在尝试使用模板文字,但我想我只是不明白,现在我感到沮丧。我的意思是,我想我明白了,但“它”不应该是它的工作方式,或者它应该如何得到。它应该变得不同。
我看到的所有示例(甚至标记的模板)都要求在声明时而不是运行时完成“替换”,这对我来说对于模板来说似乎完全没用。也许我疯了,但对我来说,“模板”是一个包含标记的文档,当你使用它时,它会被替换,而不是在你创建它时,否则它只是一个文档(即字符串)。模板与令牌一起存储为令牌,并且在您...评估时评估这些令牌。
每个人都举了一个类似的可怕例子:
这很好,但如果我已经知道了a
,我会选择return 'Worthless asd'
或return 'Worthless '+a
。重点是什么?严重地。好吧,关键是懒惰;更少的优点,更多的可读性。伟大的。但这不是模板!不是恕我直言。而 MHO 才是最重要的!恕我直言,问题在于模板在声明时被评估,所以,如果你这样做,恕我直言:
由于expletive
没有声明,它输出类似My undefined template
. 极好的。实际上,至少在 Chrome 中,我什至不能声明模板;expletive
由于未定义,因此会引发错误。我需要的是能够在声明模板后进行替换:
但是我不明白这是怎么可能的,因为这些并不是真正的模板。即使你说我应该使用标签,不,它们也不起作用:
这一切都让我相信模板文字的名字非常糟糕,应该被称为它们的真正含义:heredocs。我想“字面意思”部分应该告诉我(如,不可变)?
我错过了什么吗?有没有(好的)方法来制作可重用的模板文字?
我给你,可重用的模板文字:
这是一个天真的“助手”功能......
...使其“更好”。
我倾向于称它们为模板肠道,因为它们产生曲折感觉的区域。
javascript - 模板字符串作为对象属性名称
为什么 JavaScript 不允许模板字符串作为对象属性键?例如,当我输入:
进入 NodeJS REPL,它会抛出一个SyntaxError
带有“意外模板字符串”的长堆栈跟踪。然而,属性值很好,这并不出人意料。类似的错误发生在浏览器中,例如,Firebug 抛出一个SyntaxError
带有“invalid property id”的错误。
“计算的属性名称”中允许使用模板字符串。例如,这在所有支持语法的浏览器中编译得非常好:
并创建对象{"bar1": "baz"}
。
为什么不允许模板字符串作为文字对象键?是出于性能原因吗?必须编译模板字符串,可能在运行时(如果我错了,请纠正我),这意味着每次遇到此对象时,解释器都必须计算对象名称。考虑到诸如“熟”模板字符串之类的因素,这似乎会变慢,尽管自 ES5 以来我们已经有了 getter 和 setter。Firefox 没有将此作为错误提及,这就是我发现它出乎意料的原因。将来某个时候会允许使用这种语法吗?
javascript - 标记模板中是否组合了兄弟替换?
考虑以下几点:
${123}${'abc'}
相当于${123 + 'abc'}
?_ 换句话说,是否将 ciblings 转换为${123 + 'abc'}
幕后的格式?
另外,有人将如何在他们自己的标记模板函数中处理这种特定情况?
javascript - ES6:创建 ASCII 字符串的错误字符转义序列
这是我的代码:
但是,我Bad character escape sequence
从 Babel 收到。我试图结束:
\u0003
在ascii
变量中。我究竟做错了什么?
编辑:
结束了ascii = (eval('"\\u00' + padded + '"'));
node.js - 没有标志的 NodeJS 上的 ECMA 脚本 2015 (ES6)
根据这篇文章,许多 ES6 函数(特别是模板文字,正式称为“模板字符串”)默认启用。
在终端中输入了以下内容:
即使使用“--harmony”标志,模板文字也不会作为代码执行,而是被视为字符串。
我的版本如下:
任何建议将不胜感激。
javascript - 如何在 ES6 中嵌套模板字符串?
我prefer-template
从 eslint 得到一个错误。对于解决方法,我将代码更改为在函数内部使用模板字符串,该模板字符串require
嵌套在url
函数内部,如下所示:
然而,这显然是一个错误。这是我之前使用的代码,在require
函数内部连接一个加号而不是模板字符串。
是否可以定义嵌套的模板字符串?