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

JavaScript中Function构造函数语法错误捕获失效问题求助

问题分析

你遇到的问题核心在于:new Function()在创建函数的瞬间就会对传入的代码进行语法解析,如果strExpression存在语法错误,这个错误会在函数创建阶段(也就是let calc = new Function(...)这一行)就抛出,而你的try/catch只包裹了calc()的调用过程,自然捕获不到这个阶段的错误。

解决方案

把new Function()的创建过程也放到try块内部,这样就能捕获到语法解析阶段的错误了。同时别忘了给result加上变量声明(避免全局变量污染):

function compute(strExpression){
  try {
    let calc = new Function(`return ${strExpression};`);
    const result = calc();
    return result;
  } catch (error) {
    // 可选:打印错误详情用于调试
    console.error('计算出错:', error);
    return null;
  }
}
额外说明
  • 当你传入无效表达式(比如"a + ")时,new Function()会直接抛出SyntaxError,现在这个错误会被try/catch捕获,不会再泄漏到控制台。
  • 如果需要区分是语法错误还是运行时错误(比如引用了未定义的变量),可以在catch里判断错误类型来做不同处理:
    catch (error) {
      if (error instanceof SyntaxError) {
        console.error('语法错误:', error);
      } else {
        console.error('运行时错误:', error);
      }
      return null;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:39:01