Skip to content

runTemplateString

runTemplateString方法用于运行模板字符串,将模板中的 ${变量名} 替换为 variableMap 中对应的值。使用 new Function 构造函数实现模板解析与执行。

语法

javascript
runTemplateString(template, variableMap)

描述

runTemplateString方法接收一个模板字符串和一个变量映射对象,将模板中的 ${变量名} 占位符替换为 variableMap 中对应的值。

执行流程:

  1. 通过正则表达式从模板中提取所有 ${变量名} 占位符中的变量名
  2. 将提取的变量名与 variableMap 的键合并并去重,作为 new Function 的参数名
  3. variableMap 的值作为参数值,不足的参数用空字符串 '' 补齐
  4. 使用 new Function(...keys, 'return \模板`')` 构造函数生成执行函数
  5. 调用函数并返回结果,若构造或执行出错则返回空字符串 ''

变量名仅支持字母、数字和下划线([a-zA-Z0-9_]),不符合规则的占位符不会被提取。

参数

template string

  模板字符串,其中可包含 ${变量名} 占位符。变量名仅支持字母、数字和下划线。

variableMap object

  变量映射对象,键为变量名,值为对应的替换值。模板中存在但 variableMap 中未提供的变量将被替换为空字符串 ''

返回值

string

  返回替换后的字符串。如果模板构造或执行出错,返回空字符串 ''

注意事项

  • 安全警告:该函数使用 new Function 构造函数执行模板字符串,类似于 eval切勿将不受信任的输入作为模板内容,否则可能导致代码注入攻击。模板内容应始终来自可信来源
  • 变量名仅匹配 [a-zA-Z0-9_] 字符,不支持中文、特殊符号或点号访问(如 ${obj.prop} 不会被正确解析)
  • variableMap 中未提供的变量会被自动补齐为空字符串 ''
  • 当模板中使用了 variableMap 中不存在的变量名时,该变量也会作为函数参数传入,值为空字符串
  • 若模板字符串本身存在语法错误(如不合法的 JS 模板字符串语法),函数会捕获异常并通过 console.warn 输出警告(dlsjs 库),返回空字符串
  • 函数内部使用 Set 对变量名去重,避免重复声明

示例

基础用法

变量补齐

动态模板

浏览器兼容

runTemplateString 函数在所有现代浏览器中均可使用,依赖 new Function 构造函数和 ES6 模板字符串语法。

性能考虑

  • 时间复杂度: O(n) - 需要遍历模板字符串提取占位符,其中 n 为模板字符串长度
  • 空间复杂度: O(k) - k 为变量名数量,用于存储参数名和参数值
  • 使用 new Function 构造函数,每次调用都会创建新函数,存在一定的性能开销
  • 正则表达式提取占位符采用迭代方式,避免递归
  • 不适用于高频调用的场景,建议对固定模板缓存生成的函数

相关函数

  • deepConvert - 深度遍历对象并根据规则进行数据处理
  • deepMerge - 深度合并两个对象