JavaScript的错误处理
一、错误类型
Error
EvalError
RangeError
ReferenceError
syntaxError 语法错误
TypeError
URIError
Error是基类型,其他错误类型都继承自该对象,因此所有的错误类型都共享一组相同的属性。该错误类型很少见。
EvalError是使用eval()函数而发生的异常抛出的,当没有吧eval()当成一个函数使用的时候就会抛出。
RangeError
数值超出一定的范围会触发,在找不到对象的时候也会触发,在未声明时候去使用变量时候也会触发
TypeError
类型错误,最常见的额类型错误就是传递给函数的参数事先未检查
二、try-catch语句
try{ leaf() } catch(error){ console.log(error.message); }
//leaf is not defined
三、finally
可选的,但是一旦使用,其代码无论如何都会执行,即使前面使用了return
try{ return 1; }catch(error){ return 2; }finally{ return 3; } //chrome下报错了Uncaught SyntaxError: Illegal return statement
四、抛出错误 throw操作
在遇到throw符号的时候,代码会立即执行。仅当try-catch语句捕获到被抛出的值的时候,代码才会继续执行。
throw new Error('something bad hanppened');
五、Error事件
任何没有通过try-catch处理的错误都会触发window对象的error事件。只要发生错误,无论是不是浏览器生成的,都会触发error事件,并执行这个事件的处理函数。img的没有获得正确的src也会触发。
六、常见的错误类型
1、类型转换错误
console.log(1==true) //true
console.log(1==true) //false
在if()之类的判断语句中,在执行下一步的时候,会自动的把任何值转换成布尔值。
方案: 建议使用 === !== 操作符
2、数据类型错误
比如
null 和undefined 使用点操作
对非数组的值使用sort()的reversed()等方法
方案:
基本类型(undefined null boolean string number)用typeof去检测;
对象则用instanceof去检测(注意array比较特别)
3、通信错误
不正确的使用URL和在服务器响应的数据不正确的时候
解决,将数据发给服务器应该使用encodeURIComponent()对数据进行编码。
七、总结
避免浏览器响应JavaScript错误的方法
1、在可能发生错误的地方使用try-catch语句,这样有机会以适当的方式对错误给出响应,不必沿用浏览器的错误机制。
2、是当时会用window.onerror事件处理程序,此方法可以处理try-catch不能处理的所有错误。
3、发生书错误的主要原因
类型转换,
未充分检测数据类型
发送到服务器或从服务器接收的数据有误