gpt4 book ai didi

javascript - ES6 模板字面量到 "decompiled"数组表示

转载 作者:行者123 更新时间:2023-11-29 10:03:39 24 4
gpt4 key购买 nike

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

例如:

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

似乎被编译成代表的东西:

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

我的问题是,我如何获取 `my name is ${'Anthony'}` 并得到 [['my name is '], '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));

我在 myliteral 中使用一个函数来证明该函数没有被计算。您可以假设 mytag 具有计算函数的逻辑。

最佳答案

你可以做

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

并将其命名为

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

I'd like to get the array representation without the use of a tag

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)

没有办法绕过标签来获取模板值而不是字符串。

关于javascript - ES6 模板字面量到 "decompiled"数组表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48798107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com