首页 >web前端 >js教程 >如何在没有'eval”或'new Function”的情况下将常规字符串转换为模板文字?

如何在没有'eval”或'new Function”的情况下将常规字符串转换为模板文字?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-22 10:05:14713浏览

How Can a Regular String Be Converted to a Template Literal Without `eval` or `new Function`?

将简单字符串转换为模板字符串

可以轻松地将常规字符串转换为模板字符串吗?考虑以下示例:

let a = "b:${b}";

我们如何动态地将其转换为模板字符串,而不诉诸 eval、new Function 或其他动态代码生成技术?

let b = 10;
console.log(a.template()); // b:10

ES6 解决方案

在现代 JavaScript 中,我们可以利用 ES6 功能来实现这一点conversion:

String.prototype.interpolate = function(params) {
  const names = Object.keys(params);
  const vals = Object.values(params);
  return new Function(...names, `return \`${this}\`;`)(...vals);
};

const template = 'Example text: ${text}';
const result = template.interpolate({
  text: 'Foo Boo'
});
console.log(result); // 'Example text: Foo Boo'

此方法利用接受参数对象的 String.prototype.interpolate 函数。它使用对象的键和值动态构造一个新函数,然后执行它以返回插值字符串。

以上是如何在没有'eval”或'new Function”的情况下将常规字符串转换为模板文字?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn