JavaScript缺失指数错误:EJS传递_id至JS变量失败
解决EJS渲染ObjectId到JS变量的语法错误问题
你的问题根源很明确:MongoDB的_id是字符串类型的ObjectId,但你直接把它渲染到JS代码里时,没给它加引号,导致浏览器把5eb3ad8deeaa65dc55c47a0f当成了无效的数字字面量——JS会误以为你在写指数表达式(比如1e3这类格式),但实际格式完全不对,所以抛出了“missing exponent”的错误。
之前尝试的toString()方法没用,是因为你把未加引号的ID作为参数传给toString()时,JS在解析这个参数阶段就已经报错了,根本没机会执行toString()函数。
这里给你两个靠谱的解决方案:
方案1:直接给EJS输出添加引号
这是最直观的方法,把渲染出来的ID包裹成字符串字面量:
var getId = "<%= chattingTo._id %>";
渲染后的JS代码会变成:
var getId = "5eb3ad8deeaa65dc55c47a0f";
这完全符合JS语法规范,浏览器能正确识别这是一个字符串变量。
方案2:用JSON.stringify安全处理
如果要适配更通用的场景(比如应对可能包含特殊字符的字符串),可以用JSON.stringify自动处理引号:
var getId = <%= JSON.stringify(chattingTo._id) %>;
JSON.stringify会把传入的字符串转换成合法的JSON格式字符串,渲染后同样会生成带双引号的正确代码,效果和方案1一致,但适用性更广。
内容的提问来源于stack exchange,提问作者Iliyad Sama
相关产品推荐
相关产品推荐

