Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中是否存在错误类型?_Javascript - Fatal编程技术网

Javascript中是否存在错误类型?

Javascript中是否存在错误类型?,javascript,Javascript,我想问一下java脚本错误,是否存在类似php的错误类型 或其他, 示例:在php中,我们有通知,而解析错误..etc通知不会 停止php执行,但解析将停止执行php代码 直接 现在有没有这样的js错误,或者js分类是什么 错误。。我知道我们可以通过尝试来处理错误,但是有吗 js中出现错误,脚本已停止,其他人不会停止执行脚本 多谢各位 js中是否有错误被搁置脚本,其他人不会停止执行脚本 除了解析/语法错误,没有 JavaScript有例外。异常退出抛出它的代码和调用它的代码,依此类推,直到捕获为

我想问一下java脚本错误,是否存在类似php的错误类型 或其他,

示例:在php中,我们有通知,而解析错误..etc通知不会 停止php执行,但解析将停止执行php代码 直接

现在有没有这样的js错误,或者js分类是什么 错误。。我知道我们可以通过尝试来处理错误,但是有吗 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();
因为你扔的东西可以是任何东西,你可能认为有一种方法可以捕捉某些东西,但事实并非如此<代码>捕获捕获抛出的任何异常。因此:

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
派生版本,尽管这比应该的要痛苦一些:

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;
然后:

注意,我们必须在
MySpecificError
中填写代码来创建堆栈跟踪。(还请注意,并非所有引擎都提供堆栈跟踪,但如果它们提供堆栈跟踪,则允许您使用它。)

某些引擎提供了一些现成的错误类型:

  • 错误
  • 范围错误
    (某些内容超出范围)
  • ReferenceError
    (但通常情况下,引擎会抛出该错误)
  • 类型错误
    (再次)
  • 语法错误
    (再次)

最后,值得注意的是,在其他环境中会导致异常的一些事情在JavaScript中并不存在,主要是在数学方面。例如:

var result = 10 / 0;
在许多非JavaScript环境中,这会导致运行时错误(除零)。在JavaScript中,它不是<代码>结果获取值
无穷

同样地:

var x = Number("I am not a number");


…不会引发解析错误,它会将
x
设置为
NaN
(“不是数字”)。

是。Javascript错误可以有类型,并且有一个标准的错误类型层次结构。您还可以编写代码来“抛出”不是错误对象的东西

(事实上,由于Javascript/ECMAScript中的
catch
子句不会根据异常的类型进行区分,因此异常处理往往相当粗糙;即“捕获所有错误”,然后尝试恢复。因此,首先,抛出什么
并不重要。)

ECMAScript 5.1规范指出语法错误是“早期错误”,必须在程序执行之前报告。例外情况是,在使用
eval
运行的代码中检测到语法错误。然而,规范没有说明如何早期报告错误,或者之后会发生什么。(至少,我不认为它是…)

我认为Javascript解析器/编译器/解释器的一种常见策略是跳到封闭块,用运行时抛出异常的代码(例如
SyntaxError
)替换受影响的代码

参考资料:


谢谢你,伙计,这是一个很好的回答,但是关于错误类型,这意味着js中所有的错误都有相同的类型..我们可以通过try,catch only来处理它?@AnisHikmatAbu hmiad:是的,对不起,我的意思是:它们的类型并不都相同(你可以抛出任何东西),但是
catch
捕获任何抛出的异常。它不像其他一些语言,你可以抓住一些而不是其他。我想说出来,我现在要添加一些东西。@AnisHikmatAbu hmiad:我已经添加了我现在想要添加的位。如果你想知道错误是错误、语法错误还是MySpecificError,你可以使用
instanceof
。谢谢你,伙计。。我从你和其他人身上学到了很多答案,谢谢你的帮助
var result = 10 / 0;
var x = Number("I am not a number");
var x = parseInt("I am not a number", 10);