问题标签 [tagged-templates]
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”)放入此:
例如,如果我有这样的事情:
标记模板字符串和标记函数是要走的路吗?我见过很多不同的例子,但没有一个适合这种特殊情况。
javascript - ES6:用于嵌套 html 标记的标记模板
我正在学习 JavaScript 并尝试使用它的标记模板文字。
以上是HTML代码。我想用下面的代码实现类似的结果,但允许能够替换变量str
和quote
作为数组的可能性。
如您所见,我被困在返回阶段。那么可以做些什么来改进代码呢?
ecmascript-6 - 理解 ES6 标记模板字面量
以下代码片段用于 Mozilla ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals ) 来解释Tagged Template literal
,请帮助我了解以下函数在做什么,我无法得到该功能的实际流程,因为他们已经使用keys.foreach
并且当我在 Chrome 中检查时,键是一个功能,所以无法理解
javascript - 解析 ES6 标记模板中的内容时如何报告错误?
我正在和一个朋友一起做一个小型的 Javascript 实验,它涉及一个基本的 HTML 解析器,实现为一个简单的状态机 - 你可以在这里看到代码。
我的问题是关于涉及任何类型的解析器的标记模板函数,关于错误报告 - 也就是说,如果解析器检测到无效状态,它需要报告在输入中发现错误的位置。
我的问题是以一种有意义的方式跟踪和/或解释发现错误的位置。
标记模板函数的输入实际上是源代码位(在我的情况下为 HTML)与 Javascript 值交替,所以你不能简单地(就像我现在正在做的那样,就像你在大多数普通解析器中所做的那样)计算字符并报告位置,因为交替的 Javascript 值可能不是字符串,或者可能是不被解析为文字源的字符串。
标记模板函数有什么方法可以发现交替输入字符串/值的源文件位置?
还是我怀疑这种运行时设施几乎是不可能的?除了使用 Javascript 解析器(可能提前)来发现和记录源位置之外,实际上是否没有任何有用的方法来实现这一点?
javascript - 标记模板文字的 TemplateObject 数组是否被其领域弱引用?
JavaScript 运行时创建一个冻结数组,Object.freeze(['str0 ', ' str1'])
但具有附加.raw
属性。
是否可以将该对象用作 a 中的键WeakMap
以避免每次通过循环时都必须基于数组重做工作?
第12.2.9.3 节运行时语义:GetTemplateObject ( templateLiteral )描述了如何缓存此值:
- 让领域成为当前领域记录。
- 让templateRegistry为领域.[[TemplateMap]]。
所以tag
在上面的循环中从使用到使用应该是相同的,这对于键来说是一个很好的属性。
在我看来, [[TemplateMap]] 将不得不弱引用模板对象数组,否则
会泄漏内存。
我在规范中没有看到任何内容,但是对于广泛使用的 JavaScript 引擎,是否最终会收集用于标记字符串模板的 WeakMap 条目不在可重新输入的范围内?
我问是因为我已经根据这个假设实现了一些东西,但还没有弄清楚如何测试它。
javascript - 在标记模板内插入变量
我正在使用标记模板来构建带有参数的查询。
有时我需要将一个不能作为 SQL 参数(例如,表名)传递给查询的变量。我被这个困住了...
我怎样才能解决这个问题?谢谢您的帮助 :)
编辑:我使用一个特殊的 char 作为标志来告诉何时直接替换变量......这样,当#
找到 char 时,我直接替换以下值。我很确定我们可以做得更好,但我不知道如何...
javascript - 渲染标记模板文字时的额外替换
我刚开始使用模板文字和标记的模板文字。但是我在尝试渲染模板文字时遇到了一个问题,因为它渲染了一个额外的替换,我想知道它来自哪里。
这是我尝试过的:
我的数据
我的标签功能
我的模板文字
现在,如果我这样做console.log(summaryMarkup);
,我会得到这个:
最后有一个额外的“数据不可用”。就像标签函数收到 6 parts
(替换或表达式)而不是 5。
我在这里想念什么?
javascript - Tagged template literals in styled-components with an optional additional parameter
Just trying to get my head around styled-components, specifically the suggestion in the docs which says you can set up media query templates like this:
That works fine and can easily be used like this:
I want to create a bunch of media templates but the docs suggest creating named ones which could be used like this:
I would prefer to pass an additional parameter to my function though to change the breakpoint, rather than create a different function for each one (not least because I want to be able to have an arbitrary number of them and call them by integer rather than a name). I tried just passing an argument to the template literal like this:
This obviously doesn't work and I have no idea how to pass an additional parameter to the function which the tagged template literal uses as I obviously don't understand how they work. Any ideas?
javascript - 标记模板函数的命名约定
标记模板函数不是普通函数,就像构造函数不是普通函数一样。不应该以特殊方式调用它们。构造函数,带有new
, 使用插值字符串文字标记函数。
我们有一个约定,构造函数必须是 Pascal Case,所以调用者很清楚它是一个构造函数。
- 标记函数是否有类似的约定?
- 如果不是,那么强制他们有一个尾随下划线对任何其他约定来说都是模棱两可的吗?
this 不是普通函数的参数是第一个参数不是字符串。
同样,该s.raw
属性包含未转义的字符串。没有实际的方法来欺骗这一点。即使可以,这也是非常糟糕的做法。
鸭子打字问题
虽然可以创建一个鸭子类型的对象以传递给该方法,这样它不会立即失败,但 engune 生成的对象的接口可能会扩展(例如,可能escapedRaw
添加了一个属性)。这意味着任何将该方法作为普通函数调用的东西都会中断。
当我们编写一个完全可以控制它的普通函数时,这里不是这种情况,因为s
如果函数的编写者不控制参数类型。