




JavaScript模板引擎核心是安全灵活替换占位符并支持简单逻辑,可通过正则替换、Function构造函数(慎用)或Proxy+字符串解析实现,推荐使用lit-html等成熟方案避免XSS风险。
JavaScript实现模板引擎的核心是用数据填充模板字符串,关键在于安全、灵活地替换占位符,并支持简单逻辑(如条件、循环)。不需要引入大型库,几行代码就能写出轻量可用的模板函数。
最简方式是用 {{key}} 语法,配合 replace() 和正则全局匹配:
{{name}} 欢迎你,今年 {{age}} 岁
template.replace(/{{(\w+)}}/g, (match, key) => data[key] ?? '') 替换所有占位符?? '' 防止 undefined 转成字符串 "undefined"若需在模板里写 {{user.name.toUpperCase()}} 或 {{price > 100 ? '贵' : '便宜'}},可把模板编译成函数:
{{...}} 替换成 ${...},再包裹进模板字
面量中return `${user.name.toUpperCase()}` 的函数体new Function('data', 'with(data){ return `...`; }') 执行(注意:存在 XSS 风险,仅限可信数据)更健壮的做法是不执行任意代码,而是预定义支持的语法,比如:
{{name}} → 取值(支持点号路径,如 {{user.profile.avatar}}){{#if showTitle}}{{title}}
{{/if}} → 简单条件{{#each items}}- {{text}}
{{/each}} → 循环渲染get(obj, path) 函数获取日常项目中不必从零造轮子:
map/join 拼接(例如生成列表)lit-html 或 mustache.js,体积小、无依赖、易上手eval 或 Function 处理用户输入的模板,防止脚本注入element.innerHTML = result 前,确认内容已转义(或用 textContent 渲染纯文本)