gpt4 book ai didi

javascript - 标记模板中是否合并了同级替换?

转载 作者:行者123 更新时间:2023-11-30 00:20:58 25 4
gpt4 key购买 nike

考虑以下因素:

String.raw`Test ${123}${'abc'}`;
String.raw`Test ${123 + 'abc'}`;

${123}${'abc'}是否等同于${123 + 'abc'}?换句话说,是否在幕后将同胞转换为 ${123 + 'abc'} 格式?

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

最佳答案

对于 String.raw,行为本质上是相同的。它和 +(带有字符串值)都执行连接,获得相同的结果。


它们之间的区别在于,第一行延迟了 String.raw 的连接,使用 ${123}${'abc '} 作为单独的参数提供给它。

在使用 + 时,连接总是预先执行,仅将单个值传递给 String.raw for ${123 + 'abc'}.

function foo(template, ...values) {
console.log(template, values);
}

foo`Test ${123}${'abc'}`; // [ 'Test ', '', '' ] [ 123, 'abc' ]
foo`Test ${123 + 'abc'}`; // [ 'Test ', '' ] [ '123abc' ]

对于其他标记函数,差异可能更明显,因为该函数可能在连接之前(或之外)执行其他操作。

一个人为的例子:

// adds 99999 to each value
function bar(template, ...values) {
var raw = template.raw;
var result = raw[0];

values.forEach((value, i) => {
result += value + 99999;
result += raw[i + 1];
});

return result;
}

console.log(bar`Test ${123}${'abc'}`); // 100122abc9999
console.log(bar`Test ${123 + 'abc'}`); // 123abc99999

关于javascript - 标记模板中是否合并了同级替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33201172/

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