3分實現(xiàn)功能7分異常烘豹。我們每天都在用標準庫、用別人的庫也自己寫庫給別人用熬尺,異常處理做的好就是好庫夺欲。javascript開發(fā)時try-catch是很好的捕獲異常并處理異常的方式,把那些類型轉換失敗描函、數(shù)組溢出等可能出現(xiàn)的異常導致的卡死崩潰用另一種方式處理掉崎苗。為可能出現(xiàn)異常的代碼塊用try-catch包起來這當然是個好習慣,可是畢竟異常說來就來赘阀、想來就來益缠,18種花樣給你驚喜,總有漏網(wǎng)之魚你就沒打上try-catch就出事了基公。所以你需要找個能幫你“兜底”的人幅慌,就是window對象的error事件。
可以如圖中這么寫:
/**
*@param message 錯誤的描述
*@param url 錯誤所在的文件url
*@param line 錯誤所在的行
*/
window.onerror = function (message,url,line) {
alert(message);//這里寫上自己的處理邏輯
return false;
}
window的error會在任何沒有用try-catch處理的異常發(fā)生時觸發(fā)轰豆。這個事件可以充當整個文檔的try-catch胰伍,是避免由瀏覽器報錯的最后一道防線,這么做就有人幫你“兜底”了酸休,就是個閉環(huán)了骂租,你才能自信地說"放心,所有異常我都有處理"斑司。
ps:image對象也有error事件渗饮,比如當src指向的圖片url不對時,就會觸發(fā)error事件宿刮,你可以在事件處理程序里提供一個默認圖片互站,或者提示加載出錯等等。
另外僵缺,說到javascript的異常處理胡桃,自己開發(fā)還要多注意以下2點:
1、用別人的庫時不要太信任它磕潮。用它的函數(shù)時都盡量用try-catch包起來翠胰。
2、同樣自脯,自己寫庫的時候要注意該拋異常就拋之景,別不處理。throw new Error(...)會讓你的庫更友好冤今。
/**
* @desc 數(shù)組元素去重
* @param {Array} arr1
* @return {Array} 去重后的數(shù)組
*/
function arrayNoRepeat(arr) {
if(arr instanceof Array) { //先檢查入?yún)⑹遣皇菙?shù)組闺兢,不是的話則拋個異常出去
return [... new Set(arr)]
}
else {
throw new Error("Unable to operat! Its type isn't Array.");
}
}
上面,如果入?yún)⒉皇菙?shù)組的話別簡單的直接return,雖然程序沒有什么問題屋谭,但是這個時候調用者就懵逼了脚囊,他沒看到結果以為你函數(shù)寫錯了呢。相反你給他拋個數(shù)組類型的異常出去桐磁,告訴他參數(shù)傳錯了悔耘。如果你這么做了可以很大程度上指導他們注意要傳正確的參數(shù),心底會對你的函數(shù)更信任我擂,而且當異常發(fā)生時他們會下意識地認為是他們自己的錯衬以,而是自己不會用。