JavaScript代码报错unexpected end of input,无法定位错误行
解决JavaScript中eval()引发的"unexpected end of input"错误
你的代码报错核心原因是生成的数学表达式末尾多了一个运算符,导致eval()无法解析完整的语法结构。
具体问题分析
当传入MathId = "B16-4131-8731"时:
MathOrder被解析为"4131"(长度4),通过转换表得到运算符字符串"/+*+"ExtraGate被解析为"8731"(长度4)- 原循环逻辑是每一次都拼接
数字+运算符,四次循环后得到的表达式是"8/7+3*1+"——末尾多了一个+,这直接导致eval()抛出"unexpected end of input"错误,因为表达式未完成。
修复方案
修改构建finalResult的循环逻辑,只在数字之间插入运算符,避免末尾残留多余符号:
var finalResult = ""; // 循环到倒数第二个元素,只拼接数字+运算符 for (var j = 0; j < MathOrder.length - 1; j++) { var digitB = ExtraGate[j]; finalResult += digitB + convertedMathOrder[j]; } // 单独添加最后一个数字,不追加运算符 finalResult += ExtraGate[MathOrder.length - 1];
修复后效果
调用encrypt("this has no use yet", "B16-4131-8731")会生成合法表达式"8/7+3*1",eval()执行后得到预期计算结果(约4.142857142857143)。
额外提醒:生产环境中应尽量避免使用
eval(),它存在安全风险和性能损耗,建议通过手动拆分表达式、逐段计算的方式替代。
内容的提问来源于stack exchange,提问作者Mini Webdev
相关产品推荐
相关产品推荐

