JavaScript常见错误和调试(二)

102 阅读3分钟

这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战

抛出错误

try/catch中有一个throw机制操作符。用于在任何时候抛出自定义错误。而且throw操作符必须要有一个值,但不限制值的类型。使用throw操作符时,代码会立即停止执行,除非try/catch语句捕获了抛出的值。我们也可以通过内置的错误类型来模拟浏览器出现的错误。而且每种错误类型的构造函数都只会接收一个参数,这个错误参数就是错误消息。浏览器会处理自己生成的错误一样来处理这个自定义错误。自定义常见的错误类型由ErrorRangErrorReferenceErrorTypeError。而且通过继承Error也可以创建自定义的错误类型,而且创建自定义错误类型时,需要提供name属性和message属性。继承Error的自定义错误类型会被浏览器当成其他内置错误类型,这种自定义错误类型有助于在这捕获错误时更准确地区分错误。

throw 'zss';
throw '666';

Error

onerror事件处理程序中,任何浏览器都不会传入event对象,但是会传入3个参数,分别是错误消息发生错误的URL行号。其中URL就是当前文档的地址,而行号可能指的是嵌入JavaScript或外部文件中的代码。在任何错误无论是否是浏览器生成的,都会触发error事件并执行这个事件处理程序,可以返回false来阻止浏览器默认报告错误的行为。但是在IE和Firefox中处理错误不一样,在IE中发生error事件时,正常代码会继续执行,所有变量和数据会保持。在Firefox中,正常代码会执行会终止,错误发生之前的所有变量和数据会被销毁,导致很难分析处理错误。error事件也会出现在图片中,当图片中src中的URL没有返回可识别的图片格式,就会触发error事件。

window.onerror = (ms, ulr, line) => { console.log(ms); return false; }

识别错误

识别错误中有3中类型,分别为类型转换错误数据类型错误通信错误。类型转换错误的主要原因是使用了会自动改变某个值的数据类型的操作符或语言构造。数据类型错误常发生在将意外值传给函数的时候。如果函数必须返回一个字符串。这个函数的用途是返回给定 URL 的查询字符串。对于查询字符串,应该都要通过encodeURIComponent()编码。这个函数接收三个参数:添加查询字符串的 URL参数名参数值

function zss(url, name, value) {
    url += '${encodeURIComponent(name)=${encodeURIComponent(value)}';
    return url;
}