是否存在阻止与非阻止Javascript错误之类的事情?
我的意思是我看到我的网站报告了一些错误,但所涉及的过程仍然成功完成(据我所知)。这些错误包括: TypeError:undefined不是对象(评估' e.nodeName.toLowerCase') TypeError:e.nodeName未定义 (这些总是来自我的常规JQuery库文件)
这就是我所说的非阻塞'错误,因为涉及的脚本似乎成功完成。
如果存在阻止v非阻塞这样的事情,那么它的正确术语是什么,以及如何区分2之间的区别(例如,我可以优先考虑阻塞错误)?
由于
答案 0 :(得分:2)
每当
throw Error;
异常会使功能堆栈崩溃。如果它到达它的末尾,它会抛出未捕获的(=意外)异常。这会使整个程序暂停,因为它不太可能正常工作。
但是它可以 catched (=预期的例外):
try{
someerrorproducingfunc();
//continue after success
}catch(e){
//continue after error
console.error(e);
}
//continue after error+success
因此代码继续进行(在成功之后继续部分)。但是,如果您使用 console.error ,它会记录看起来像一个错误。
ressource:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/throw
请注意,错误只是js中的对象构造函数:
new Error("test");
throw 抛出异常 ...
答案 1 :(得分:0)
没有。所有未捕获的错误都是阻塞的,它们将结束整个调用堆栈的执行。但是,在各种操作之后发生的错误将不会恢复到以前的状态。进行AJAX调用,然后出现未定义的错误将不会取消调用,例如。演示:
(function () {
"use strict";
let a = 5;
console.log(a); // 5
setTimeout(function () {
console.log(a); // 10
// will execute because it is a fresh stack
// the variable a is 10 despite and not 12 because it happened after
}, 250);
const withError2 = function () {
a = 10;
a.x.z = 2; // Error
a = 12; // never executes because it comes after the error
}
withError2();
console.log(a); // never executes because it comes after the error
}());