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

如何在Express的EJS脚本标签中获取服务端传递的变量?

解决Express+EJS中服务端变量在客户端script标签无法获取的问题

问题原因分析

你之前的两种写法存在明显缺陷:

  • 直接写var hidePayment = hidePayment;:客户端JS会将hidePayment视为自身作用域内的变量,但服务端传递的变量并未被渲染到客户端代码中,最终结果是变量未定义。
  • 用var hidePayment = "{{hidePayment}}";:渲染后会生成字符串"true"或"false",而非布尔值。比如当值为false时,字符串"false"在JS中属于真值,会导致逻辑判断完全偏离预期。

正确实现方式

方式1:直接输出布尔值(适合简单类型)

利用EJS的<%= %>标签直接输出变量值,无需添加引号:

<script>
  var hidePayment = <%= hidePayment %>;
  // 测试:控制台会输出布尔值true/false及对应的类型
  console.log(hidePayment, typeof hidePayment);
</script>

渲染后客户端代码会变为var hidePayment = true;或var hidePayment = false;,是标准的布尔类型。

方式2:挂载到全局window对象(适合跨脚本访问)

如果需要在多个JS文件中共享这个变量,可以将其挂载到window全局对象:

<script>
  window.hidePayment = <%= hidePayment %>;
</script>

之后在其他脚本里直接通过window.hidePayment或hidePayment即可访问。

方式3:通用JSON序列化(适合复杂类型)

如果变量是对象、数组或需要严格的类型转换,推荐用JSON.stringify配合<%- %>标签(避免HTML转义):

<script>
  var hidePayment = <%- JSON.stringify(hidePayment) %>;
</script>

这种方法能处理所有JSON支持的类型,比如字符串会自动带引号,对象会被序列化为正确的JSON结构,同时完整保留原始类型。

内容的提问来源于stack exchange,提问作者Sara Ree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:20:19