EJS传递带前导零的URL id参数时前导零丢失如何解决?
问题根源
你遇到的前导零丢失问题是EJS模板渲染后,客户端JS把id值识别为数字类型导致的:
你的原始客户端代码渲染完成后,实际在浏览器中拿到的源码是:
var viewingHomebrew = 078262;
JS引擎会把不带引号的078262解析为数字字面量,数字的前导零会被自动忽略,最终得到数值78262。
解决方案
有两种常用的修复方式,任选其一即可:
方法1:直接给变量加引号(简单直观,适合确定id不含特殊字符的场景)
把客户端JS代码修改为:
var viewingHomebrew = '<%= homebrewId %>';
渲染后得到的代码为var viewingHomebrew = '078262';,被识别为字符串类型,自然保留前导零。
方法2:使用JSON.stringify处理(兼容性更好,支持含特殊字符的id)
如果id可能包含单引号、换行等特殊字符,推荐用JSON.stringify做序列化,注意EJS要使用<%-(输出原始内容,不转义HTML实体):
var viewingHomebrew = <%- JSON.stringify(homebrewId) %>;
渲染后会自动给字符串加双引号,同时处理所有特殊字符转义,兼容性更强。
两种方法修改后,viewingHomebrew都会是字符串类型,前导零不会丢失。
内容的提问来源于stack exchange,提问作者Artemis
相关产品推荐
相关产品推荐

