当前位置: 首页 > 知识库问答 >
问题:

ES6模板文字到“反编译”数组表示

蒋鹏鹍
2023-03-14

当模板文字与标签一起使用时,似乎会被编译成一个包含字符串和替换的数组

例如:

mytag `my name is ${'Anthony'}`

似乎被简化为代表:

mytag.apply(null, [['my name is '], 'Anthony'])

我的问题是,我如何获取< code > `我的名字是${'Anthony'}`并获得< code>[['我的名字是'],' Anthony']“反编译”表示?

我已经包含了一个片段来证明上述内容是正确的。

function mytag(a, ...b) {
  for (let i = 0; i < a.length; i++) {
    console.log(a[i]);
    console.log(b[i]);
  }
}

mytag`hello ${'world'}, how are ${'you'}`;

mytag.apply(null, [['hello', ', how are ', ''], 'world', 'you']);

编辑

只是为了明确我的总体目标。

我希望能够将模板文本传递到标记中。

这是一个稍微复杂一点的例子,

const myliteral = `my  name is ${() => 'Anthony'}`;
// would "decompile" to [['my name is'], f]

mytag.apply(null, fnToGetDecompiledRep(myliteral));

我在mylitar中使用一个函数来演示该函数没有得到评估。您可以假设mytagj具有评估函数的逻辑。

共有2个答案

百里阳平
2023-03-14

看看这个:

js lang-js prettyprint-override">const mytag = (...args) => args;
console.log(mytag`my name is ${'Jason'}`);
柳志专
2023-03-14

你可以只做

function templateValues(...args) {
    return args;
}

并称之为

console.log(templateValues `my name is ${'Anthony'}`)
console.log(templateValues `hello ${'world'}, how are ${'you'}`;

我想在不使用标签的情况下获得数组表示

const myliteral = `my  name is ${() => 'Anthony'}`;
// would "decompile" to [['my name is'], f]
mytag.apply(null, fnToGetDecompiledRep(myliteral));

不,这行不通。myLiteral 将被分配文本表达式在此处创建的字符串值。之后您无法“反编译”它。您需要使用

const myParts = templateValues `my  name is ${() => 'Anthony'}`;
// same as  … = [['my name is'], () => 'Anthony'];
myTag.apply(null, myParts); // or myTag(...myParts)

无法绕过标记来获取模板值而不是字符串

 类似资料:
  • 主要内容:1.多行字符串,2.字符串插值,3.标记模板,4.原始字符串,5.String.fromCodePoint()模板文字是ECMAScript 2015/ES6中引入的新功能。它提供了创建多行字符串和执行字符串插值的简便方法。模板文字是字符串文字,并允许嵌入表达式。 在ES6之前,模板文字被称为模板字符串。 与字符串中的引号不同,模板文字用反引号()字符(QWERTY键盘中ESC键下方的键)括起来。 模板文字可以包含占位符,由美元符号和大括号表示。在反引号内,如果要使用表达式,则可以将该

  • 问题内容: 我正在使用新的ES6模板文字功能,想到的第一件事是JavaScript,因此我着手实现了一个原型: 但是,在将模板文字传递给我的原型方法之前,需要先对其进行评估。有什么方法可以编写上述代码以将结果推迟到动态创建元素之后? 问题答案: 我可以看到三种解决方法: 使用模板字符串,就像设计使用的那样,没有任何功能: // might make more sense with variable

  • ES6引入了一种通过反引号( ` )标记的新的字符串文字类型。 这些字符串文字可以包括换行符,并且有一个新的机制用于将变量插入字符串:

  • 主要内容:编译JRXML文件,预览Jasper文件我们在上一章中生成了 JasperReport 模板(JRXML 文件)。该文件不能直接用于生成报表。它必须编译为 JasperReport 的原生二进制格式,称为Jasper文件。在编译时,我们将 JasperDesign 对象转换为 JasperReport 对象。 接口net.sf.jasperreports.engine.design.JRCompiler在编译过程中起着核心作用。该接口有

  • 你可能有兴趣知道,Vue 的模板实际是编译成了 render 函数。这是一个实现细节,通常不需要关心,但如果你想看看模板的功能是怎样被编译的,你会发现会非常有趣。下面是一个使用Vue.compile来实时编译模板字符串的简单 demo: <div> <header> <h1>I'm a template!</h1> </header> <p v-if="message">

  • 尽管 PHP 不断升级为成熟的、面向对象的语言,但它作为模板语言 没有改善多少。编译型模板,比如 Twig、Brainy 或 Smarty,提供了模板专用的新语法,填补了这片空白。从自动转义到继承以及简化控制结构,编译模板设计地更容易编写,可读性更高,同时使用上也更加的安全。编译型模板甚至可以在不同的语言中使用,Mustache 就是一个很好的例子。由于这些模板需要编译,在性能上会带来一些轻微的影