You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于EJS中<%=、<%与<%-标签的区别及适用场景的问询

EJS中<%=、<%和<%-三种标签的区别及适用场景

嘿,这个问题我当初刚上手EJS的时候也纠结过,给你把这三个标签的差异和适用场景讲得明明白白:

1. <% %>:执行代码,不输出任何内容

这个标签就像一个"幕后执行者"——它会运行里面的JavaScript代码,但不会把代码或者执行结果输出到页面上。

  • 常见用法:写控制逻辑(循环、条件判断)、旧版的模板引入(比如你提到的<% include ../partials/header.ejs %>)
  • 例子:
    <% // 这里是一段不会输出的注释 %>
    <% for (let item of list) { %>
      <!-- 循环逻辑执行,但循环代码本身不会出现在最终HTML里 -->
    <% } %>
    
  • 适用场景:所有只需要执行逻辑、不需要向页面输出内容的操作,比如流程控制、变量赋值、旧版模板引入。

2. <%= %>:输出内容,自动转义HTML

这个标签会把变量或表达式的结果输出到页面,但会自动转义HTML标签——也就是说,如果内容里有<、>这类HTML特殊字符,会被转换成实体字符(比如<变成&lt;),防止XSS攻击。

  • 常见用法:输出普通文本内容,比如页面标题、用户输入的纯文本
  • 例子:
    <!-- 如果title变量是"<h1>我的页面</h1>" -->
    <title><%= title %></title>
    <!-- 最终页面会输出:<title>&lt;h1&gt;我的页面&lt;/h1&gt;</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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:28:55