在代碼的運(yùn)行過(guò)程中,問(wèn)題時(shí)有發(fā)生;如何優(yōu)雅的處理的這些錯(cuò)誤,現(xiàn)的很重要。總體來(lái)說(shuō)問(wèn)題分為2大類:
系統(tǒng)級(jí)錯(cuò)誤,簡(jiǎn)稱為error,如語(yǔ)法錯(cuò)誤;應(yīng)用級(jí)錯(cuò)誤簡(jiǎn)稱為exception,如用戶輸入的數(shù)值不合法等。如何當(dāng)
前代碼不能處理此問(wèn)題,則應(yīng)該把此問(wèn)題從當(dāng)前運(yùn)行環(huán)境中跳出,并把它交給上一級(jí)環(huán)境處理。這就用到了
try{}catch(){}異常處理。
問(wèn)題的相關(guān)信息被封裝到一個(gè)對(duì)象里。在javascript中,常用Error對(duì)象來(lái)保存有關(guān)錯(cuò)誤的信息。
為了區(qū)別系統(tǒng)級(jí)錯(cuò)誤和應(yīng)用級(jí)錯(cuò)誤,給Error錯(cuò)誤增加type屬性(error/exception)。
示例代碼如下:
<script language="javascript">
function errorTest(){
try{
var s;
alert(s.toString());
}catch(e){
var error=new Error();
error["type"]="error";
error["number"]="110";
error["description"]=e["description"]
throw error;
}
}
function exceptionTest(i){
try{
if(parseInt(i)>0)
{
var exception=new Error();
exception["description"]="不能大于0";
throw exception;
}
}catch(e){
var exception=new Error();
exception["description"]=e["description"];
exception["type"]="exception";
exception["number"]="120";
throw exception;
}
}
function test1(){
try{
errorTest();
}catch(e){
if(e["type"]=="error"){
alert("系統(tǒng)級(jí)錯(cuò)誤!");
}else{
alert("應(yīng)用級(jí)錯(cuò)誤!");
}
}
}
function test2(){
try{
exceptionTest(1);
}catch(e){
if(e["type"]=="error"){
alert("系統(tǒng)級(jí)錯(cuò)誤!");
}else{
alert("應(yīng)用級(jí)錯(cuò)誤!");
}
}
}
test1();
test2();
</script>
以上代碼比較簡(jiǎn)單,但是在代碼比較復(fù)雜的情況下,可以根據(jù)具體情況完善。用此異常框架處理起來(lái)流程比較清晰。