這章比較好理解,也很是常見,做者給的倆個例子就能說明一切:php
// 將配置數據藏在代碼中
function validate(value) { if (!value) { alert("Invalid value"); location.href = "/errors/invalid.php"; } } function toggleSelected(element) { if (hasClass(element, "selected")) { removeClass(element, "selected"); } else { addClass(element, "selected"); } }
這樣的代碼確定不利於修改和維護,將配置數據(hardcoded)或者咱們稱爲硬編碼(寫死的值)提取出來就豁然開朗了:瀏覽器
var config = { MSG_INVALID_VALUE: "Invalid value", URL_INVALID: "/errors/invalid.php", CSS_SELECTED: "selected" }; function validate(value) { if (!value) { alert(config.MSG_INVALID_VALUE); location.href = config.URL_INVALID; } } function toggleSelected(element) { if (hasClass(element, config.CSS_SELECTED)) { removeClass(element, config.CSS_SELECTED); } else { addClass(element, config.CSS_SELECTED); } }
做者更加推薦將配置數據放於獨立的文件中,這樣更有利於管理。app
缺少經驗的開發者有時直接將一個字符串做爲錯誤拋出,如:函數
// 很差的寫法
throw "message";
這樣確實可以跑出一個錯誤,但不是全部的瀏覽器作出的響應都會按照你的預期。FireFox、Opera和Chrome都將顯示一條"uncaught exception"消息,同時它將包含上述消息字符串。Safari和IE只是簡陋的拋出一個」uncaught exception「錯誤,徹底不提供上述消息字符串,這種方式對調試無益。學習
因此做者推薦對於全部瀏覽器,惟一不出錯的顯示自定義的錯誤消息方式就是用一個Error對象。編碼
throw new Error("Something bad happened")
做者推薦老是在錯誤信息中包含函數名稱,以及函數失敗的緣由:spa
function getDivs(element) { if (element && element.getElementsByTagName) { return element.getElementsByTagName("div"); } else { throw new Error("getDivs(): Argument must be a DOM element"); } }
一句話:辨識代碼中哪些部分在特定狀況下最有可能致使失敗,並只在哪些地方拋出錯誤纔是關鍵所在。調試
做者還寫了一些關於拋出錯誤很好的經驗法則:code
PS:這點不少如jQuery的類庫處理的很是好,很值得學習。對象