runTemplateString
runTemplateString方法用于运行模板字符串,将模板中的 ${变量名} 替换为 variableMap 中对应的值。使用 new Function 构造函数实现模板解析与执行。
语法
javascript
runTemplateString(template, variableMap)描述
runTemplateString方法接收一个模板字符串和一个变量映射对象,将模板中的 ${变量名} 占位符替换为 variableMap 中对应的值。
执行流程:
- 通过正则表达式从模板中提取所有
${变量名}占位符中的变量名 - 将提取的变量名与
variableMap的键合并并去重,作为new Function的参数名 variableMap的值作为参数值,不足的参数用空字符串''补齐- 使用
new Function(...keys, 'return \模板`')` 构造函数生成执行函数 - 调用函数并返回结果,若构造或执行出错则返回空字符串
''
变量名仅支持字母、数字和下划线([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 - 深度合并两个对象