JavaScript契约和断言

JavaScript契约和断言,javascript,assert,design-by-contract,Javascript,Assert,Design By Contract,这已经困扰了我一段时间了。我在断言失败时抛出一个异常,但这只有在我能够捕获异常时才有用(在这种情况下,我向用户发出警报)。如果我不能捕捉到异常,那么 我依靠浏览器通知用户出现了内部错误(浏览器可能什么也不做,因此用户永远不会发现有问题),并且 我看不到里面,所以不能清理 那么,在JavaScript中是否有处理断言错误的好方法呢?是否有某种方法可以捕获未捕获的异常?请注意,我对单元测试、用户错误等不感兴趣-我只关心契约编程,在契约编程中,用户和开发人员都需要知道有错误。对于断言,有。但这只会记录

这已经困扰了我一段时间了。我在断言失败时抛出一个异常,但这只有在我能够捕获异常时才有用(在这种情况下,我向用户发出警报)。如果我不能捕捉到异常,那么

  • 我依靠浏览器通知用户出现了内部错误(浏览器可能什么也不做,因此用户永远不会发现有问题),并且
  • 我看不到里面,所以不能清理
  • 那么,在JavaScript中是否有处理断言错误的好方法呢?是否有某种方法可以捕获未捕获的异常?请注意,我对单元测试、用户错误等不感兴趣-我只关心契约编程,在契约编程中,用户和开发人员都需要知道有错误。

    对于断言,有。但这只会记录消息并继续

    使用HTML5,还可以使用处理程序捕获未处理的异常。有一种方法可以用来向用户显示奇特的错误消息,甚至向服务器记录异常

    如果您不能使用它,那么就只剩下围绕所有内容包装try-catch子句(尤其是事件处理程序、超时等“执行入口点”)。或者,您可以在抛出错误之前处理错误:

    function SmartError(message) {
        Error.call(this, message);
        $('<div class="error">Some problem occured, the app will stop working</div>')
            .appendTo("body");
        $.post("/log/clientside/js.php", this);
        ...
    }
    
    if (something.does(! "work"))
        throw new SmartError("mysterious problem");
    
    函数智能错误(消息){
    错误。呼叫(此,消息);
    $(“出现问题,应用程序将停止工作”)
    .附于(“主体”);
    $.post(“/log/clientside/js.php”,this);
    ...
    }
    如果(某物做了(!“工作”))
    抛出新的智能错误(“神秘问题”);
    
    问题通常是,对于
    onerror
    来说足够聪明的浏览器,不要抛出恼人的、棘手的错误=)当然是个好答案!