我想问一下Java脚本错误,是否有像php或其他错误类型,
示例:在php中,我们有通知,并且Parse Error ..etc通知不会停止php执行,但是解析将是直接停止执行php代码。
现在有这样的js错误,或者是js分类错误是什么..我知道我们可以通过try,catch ..处理错误,但是js中的错误是弯曲的脚本,其他错误不会停止执行脚本
谢谢
js中是否存在错误,脚本是弯曲的脚本,其他脚本不会停止执行脚本
除了解析/语法错误外,没有。
JavaScript有例外。异常将退出引发该异常的代码以及调用该异常的代码,依此类推,直到被捕获为止。如果未捕获,则将终止所有当前正在运行的功能,并将错误记录到Web控制台。
因此,一个异常(要么是您明确抛出的异常,要么是您做某事的副产品而发生的异常)将终止所有正在运行的函数(如果未捕获)或仅终止某些代码(如果已捕获)。
例如:
function foo() {
try {
bar(0);
}
catch (e) {
console.log("Caught exception");
}
}
function bar(a) {
if (a <= 0) {
throw new Error("'a' cannot be <= 0");
}
console.log("bar: a = " + a);
}
foo();
那里,bar
跟随异常的代码没有运行(我们看不到"bar: a = 0"
),因为抛出了异常,终止了bar
。但是,由于捕获了异常,因此foo
的代码在该catch
块中继续foo
。
JavaScript是不寻常的,因为您可以抛出任何东西,包括字符串,数字等。但是,如果需要有用的信息,通常会抛出Error
:
throw new Error("Optional message here");
由于抛出的东西可以是任何东西,因此您可能会认为有一种方法可以仅捕获某些东西,但事实并非如此。catch
捕获任何引发的异常。所以:
try {
throw "foo";
}
catch (e) {
}
try {
throw new Error();
}
catch (e)
}
try {
throw 42;
}
catch (e)
}
注意,这些catch
子句是相同的。他们抓到任何扔掉的东西。当然,您可以然后检查您得到的内容并重新抛出:
try {
// ...some code here that may throw any of several things...
}
catch (e)
if (typeof e === "string") {
// Handle it here
}
else {
throw e;
}
}
在这里,我们只处理字符串的异常,而不处理数字,Error
对象等的异常。
您可以根据需要创建自己的派生版本Error
,尽管这比应该做的要麻烦得多:
function MySpecificError(msg) {
this.message = msg;
try {
throw new Error();
}
catch (e) {
this.stack = e.stack;
}
}
MySpecificError.prototype = Object.create(Error.prototype);
MySpecificError.prototype.constructor = MySpecificError;
然后:
throw new MySpecificError("Something went wrong.");
注意,我们必须填写代码MySpecificError
以创建堆栈跟踪。(还请注意,并非所有引擎都提供堆栈跟踪,但是如果这样做,则可以使用它。)
一些引擎提供了一些开箱即用的错误类型:
Error
RangeError
(超出范围)ReferenceError
(但通常这是您会让引擎抛出的东西)TypeError
(再次)SyntaxError
(再次)最后,值得注意的是,在其他环境中会导致异常的几件事不在JavaScript中,主要是围绕数学。例如:
var result = 10 / 0;
在许多非JavaScript环境中,这会导致运行时错误(除以零)。在JavaScript中,它不是;result
获得价值Infinity
。
类似地:
var x = Number("I am not a number");
要么
var x = parseInt("I am not a number", 10);
...不会引发解析错误,而是设置x
为NaN
(“非数字”)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句