错误处理在程序设计中的重要性是必定的。任何有影响力的Web应用程序都须要一套完善的错误处理机制。php
try {
// 可能会致使错误的代码
} catch (e) {
// 在错误发生时怎么处理
}
复制代码
执行代码期间可能会发生的错误有多种类型。每种错误都有对应的错误类型,而当错误发生时,就会抛出相应类型的错误对象。
ECMA-262定义了下列7种错误类型:编程
Error跨域
EvalError浏览器
RangeErrorbash
SyntaxError服务器
ReferenceErrorapp
TypeError函数
URIErrorui
RangeError类型的错误在数值超出相应范围时触发:编码
try {
let items1 = new Array(-20);
var items2 = new Array(Number.MAX_VALUE);
} catch (e) {
console.dir(e)
}
复制代码
try {
let obj = x;
} catch (e) {
console.dir(e)
}
复制代码
eval('a++ b')
复制代码
Function.prototype.toString.call('name') // 抛出typeError
复制代码
利用不一样错误类型,能够获悉更多有关异常的信息,从而有助于对错误做出恰当的处理。
try {
// ......
} catch (e) {
if (e instanceof TypeError) {
// 处理类型错误
} else if (e instanceof ReferenceError) {
// 处理引用错误
} else {
// 处理其余类型的错误
}
}
复制代码
在跨浏览器编程中,检查错误类型是肯定处理方式的最简便途径;包含在message属性中的错误消息会因浏览器而异。
使用try-catch最适合处理那些咱们没法控制的错误。假设你在使用一个大型JavaScript库中的函数,该函数可能会有意无心地抛出一些错误。因为咱们不能修改这个库的源代码,因此大可将对该函数的调用放在try-catch语句当中。
与try-catch语句相配的还有一个throw操做符,用于随时抛出自定义错误。
throw new Error('Something bad happend')
复制代码
上面这行代码抛出一个通用错误,带有一条自定义错误消息。也能够像下面使用其余错误类型,也能够模拟出相似的浏览器错误。
throw new SyntaxError('I dont like your syntax');
throw new TypeError('What type of variable do you take me for?');
throw new RangeError('Sorry, you just dont have the range')
throw new EvalError('That doesnt evaluate.')
throw new URIError('Uri, is that you?');
throw new ReferenceError('You didnt cite your references properly');
复制代码
window.onerror = function (message, url, line) {
// 处理错误
}
复制代码
略
错误处理的核心,是首先要知道代码里会发生什么错误。因为JavaScript是松散类型的,并且也不验证函数的参数,所以错误只会在代码运行期间出现。通常须要关注三种错误:
全等操做符知道要比较的是两种不一样的数据类型,于是直接返回false。
Javascript是松散类型的,也就是说,在使用变量和函数参数以前,不会对它们进行比较以确保它们的数据类型正确。
Javascript与服务器之间的任何一次通讯,都有可能会产生错误。
function addQueryString(url, name, value) {
if (url.indexOf('?') === -1) {
url += '?';
} else {
url += '&';
}
url += `&${encodeURIComponent(name)} = ${encodeURIComponent(value)}`;
return url;
}
复制代码
使用这个函数而不是手工构建URL,能够确保编码正确并避免相关错误。
任何错误处理策略中最重要的一部分,就是肯定错误是否致命。对于非致命错误,能够根据下列一或多个条件来肯定:
开发Web应用程序中的一种常见的作法,就是集中保存错误日志,以便查找重要错误的缘由。
要创建这样一种JavaScript错误记录系统,首先须要在服务器上建立一个页面,用于处理错误数据。这个页面的做用无非就是从查询字符中取得数据,而后再将数据写入错误日志中。这个页面可能会使用以下所示的函数:
function logError (lev, msg) {
let img = new Image();
img.src = `log.php?e`
}
复制代码
这个logError()函数接收两个参数:表示严重程度的数值或字符串及错误消息。其中使用了Image对象来发送请求,这样作很是灵活,主要表现以下几方面:
错误处理相当重要。不能提早预测到可能发生的错误,不能提早采起恢复策略,可能致使较差的用户体验。
下面是几种避免浏览器响应JavaScript错误的方法。
另外,对任何Web应用程序都应该分析可能发生的错误。JavaScript中发生错误的主要缘由以下。