doubleyong
管理员
管理员
  • 最后登录2026-05-10
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:12080回复:1

ejs 变量,使用<%= %> 与<%- %> 在JS中输出变量的区别

楼主#
更多 发布于:2016-08-25 17:22
朋友在一个项目中,遇到:javascript中使用EJS模板传递的变量时,变量不能进行正常的解析,会将引号转换成特殊的字符。
错误:使用<%= %> 这样的写法输出:变量值,且赋值给js的一个变量; 此值是一个对象,在转换时,出现了转换错误. 代码如下:
        EJS:
             var data=[{name:'张三'}, {name:'李四'},{name:'王五'}] ;
              req.render("xxx.html",{user:data });
        javascript: 中
              var data = <%=user%>;
             var obj = JSON.parse(data); //在转换时出现,错误.原因是data中有一些特殊符号
最后: 找到了原因,解决方案,只需要在Js代码中的。
             var data = <%= user %> 改为 var data=<%- JSON.stringify(user) %> 即可;
            只是,将输出变量的方式由<%= %> 改为<%-%>就好;


百度:ejs中<%= %> 改为<%-%>的区别:
在 EJS (Embedded JavaScript) 模板系统中, 字符串输出时默认是经过escape转义编码的.
// 用=号输出,就会被escapge转义编码 <%= VARIABLE_NAME %>

这种默认转义编码可能会带来麻烦, 比如我要输出一个 json 对象供客户端 javascirpt 使用, 或者想输出一些动态生成的 HTML 标签, 幸运的是EJS提供另一种输出方式:
// 用“-”输出原始内容, 不会被escape, <%- VARIABLE_NAME %>
文章参考自:http://cnodejs.org/topic/505bcced417be95272064f9e
[doubleyong于2016-08-29 12:57编辑了帖子]

最新喜欢:

我们都爱梁小八我们都爱梁小...
知识需要管理,知识需要分享
doubleyong
管理员
管理员
  • 最后登录2026-05-10
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
沙发#
发布于:2020-04-28 20:09
补充说明:直接在js文件中写ejs代码是不行的,会报错. 不过在页面中的js里写ejs代码是可以的.
var data=<%- JSON.stringify(user) %>
data输出就是对象,可以直接使用
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号