关于EJS中<%=、<%与<%-标签的区别及适用场景的问询
EJS中<%=、<%和<%-三种标签的区别及适用场景
嘿,这个问题我当初刚上手EJS的时候也纠结过,给你把这三个标签的差异和适用场景讲得明明白白:
1. <% %>:执行代码,不输出任何内容
这个标签就像一个"幕后执行者"——它会运行里面的JavaScript代码,但不会把代码或者执行结果输出到页面上。
- 常见用法:写控制逻辑(循环、条件判断)、旧版的模板引入(比如你提到的
<% include ../partials/header.ejs %>) - 例子:
<% // 这里是一段不会输出的注释 %> <% for (let item of list) { %> <!-- 循环逻辑执行,但循环代码本身不会出现在最终HTML里 --> <% } %> - 适用场景:所有只需要执行逻辑、不需要向页面输出内容的操作,比如流程控制、变量赋值、旧版模板引入。
2. <%= %>:输出内容,自动转义HTML
这个标签会把变量或表达式的结果输出到页面,但会自动转义HTML标签——也就是说,如果内容里有<、>这类HTML特殊字符,会被转换成实体字符(比如<变成<),防止XSS攻击。
- 常见用法:输出普通文本内容,比如页面标题、用户输入的纯文本
- 例子:
<!-- 如果title变量是"<h1>我的页面</h1>" --> <title><%= title %></title> <!-- 最终页面会输出:<title><h1>我的页面</h1></title> --> - 适用场景:输出安全的纯文本内容,尤其是来自用户输入或外部接口的内容,用它能避免注入攻击。
3. <%- %>:输出内容,不转义HTML
和<%= %>相反,这个标签会直接输出内容,不会转义HTML标签——里面的HTML代码会被浏览器正常渲染。
- 常见用法:输出带格式的富文本、新版的模板引入(现在EJS更推荐用
<%- include('../partials/header.ejs') %>) - 例子:
<!-- 如果content变量是"<p>这是一段带格式的内容</p>" --> <div><%- content %></div> <!-- 最终页面会渲染成:<div><p>这是一段带格式的内容</p></div> --> - 适用场景:需要输出HTML格式内容的时候,比如富文本编辑器的内容、模板组件的引入(因为模板本身就是HTML结构,需要直接渲染)。
另外补充一下:你提到的<% include ../partials/header.ejs %>是EJS旧版本的模板引入方式,现在官方更推荐用函数式的<%- include('../partials/header.ejs') %>,因为include函数返回的是HTML字符串,用<%- %>才能正确渲染模板内容,而不会把HTML标签转义成实体字符。
内容的提问来源于stack exchange,提问作者Alex Ironside
相关产品推荐
相关产品推荐

