-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path错误处理与调试.txt
94 lines (67 loc) · 3.87 KB
/
错误处理与调试.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
try-catch语句
try{
//可能会导致错误的代码
} catch(error){
//在错误发生时怎么处理
}finally{
//总会执行的语句
}
错误类型
Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
其中,Error 是基类型,其他错误类型都继承自该类型。
EvalError 类型的错误会在使用eval()函数而发生异常时被抛出。ECMA-262 中对这个错误有如
下描述:“如果以非直接调用的方式使用 eval 属性的值(换句话说,没有明确地将其名称作为一个
Identifier ,即用作CallExpression 中的MemberExpression),或者为 eval 属性赋值。”简单
地说,如果没有把eval()当成函数调用,就会抛出错误,例如:
new eval(); //抛出EvalError
eval = foo; //抛出EvalError
在实践中,浏览器不一定会在应该抛出错误时就抛出EvalError。例如,Firefox 4+和IE8 对第一
种情况会抛出TypeError,而第二种情况会成功执行,不发生错误。有鉴于此,加上在实际开发中极
少会这样使用eval(),所以遇到这种错误类型的可能性极小。
RangeError 类型的错误会在数值超出相应范围时触发。例如,在定义数组时,如果指定了数组不
支持的项数(如-20或Number.MAX_VALUE),就会触发这种错误。下面是具体的例子。
JavaScript中经常会出现这种范围错误。
在找不到对象的情况下,会发生 ReferenceError(这种情况下,会直接导致人所共知的"object
expected"浏览器错误)。通常,在访问不存在的变量时,就会发生这种错误,例如:
var obj = x; // 在x 并未声明的情况下抛出 ReferenceError
至于SyntaxError,当我们把语法错误的JavaScript字符串传入eval() 函数时,就会导致此类错
误。例如:
eval("a ++ b"); //抛出SyntaxError
如果语法错误的代码出现在eval()函数之外,则不太可能使用 SyntaxError ,因为此时的语法错
误会导致JavaScript代码立即停止执行。
TypeError 类型在JavaScript中会经常用到,在变量中保存着意外的类型时,或者在访问不存在的
方法时,都会导致这种错误。错误的原因虽然多种多样,但归根结底还是由于在执行特定于类型的操作
时,变量的类型并不符合要求所致。下面来看几个例子。
var o = new 10; //抛出TypeError
alert("name" in true); //抛出TypeError
Function.prototype.toString.call("name"); //抛出TypeError
最常发生类型错误的情况,就是传递给函数的参数事先未经检查,结果传入类型与预期类型不相符。
在使用encodeURI() 或decodeURI(),而URI 格式不正确时,就会导致URIError 错误。这种错误也很少见,因为前面说的这两个函数的容错性非常高。
利用不同的错误类型,可以获悉更多有关异常的信息,从而有助于对错误作出恰当的处理。要想知
道错误的类型,可以像下面这样在try-catch 语句的catch语句中使用instanceof 操作符。
try {
someFunction();
} catch (error){
if (error instanceof TypeError){
//处理类型错误
} else if (error instanceof ReferenceError){
//处理引用错误
} else {
//处理其他类型的错误
}
}
在跨浏览器编程中,检查错误类型是确定处理方式的最简便途径;包含在message 属性中的错误
消息会因浏览器而异。
console
error(message):将错误消息记录到控制台
info( message):将信息性消息记录到控制台
log(message):将一般消息记录到控制台
warn( message):将警告消息记录到控制台
来源:
JavaScript 高级程序设计