編程實際上是一種能隨著時間不斷飛快進步的技術。但是不管變得多麼熟練,你仍然要花一些時間調試你的代碼。如果你做過家庭作業,或有過JacaScript編程經驗,你會知道相當多的時間是花在調試上。這很正常 - 這隻是編程者必須做的事之一。實際上,按照大量的研究,程式員平均百分之五十的時間花在解決代碼中的錯誤。
關鍵是學會怎樣有效地調試你的程式。我有一些技巧可以協助你解決程式為什麼沒有象應該的那樣運行,或者幫你首先避免寫有很多錯誤的代碼:
1.用不同方式列印出變數
2.注意一般性錯誤
3.編碼之前先想好
--------------------------------------------------------------------------------
如果JavaScript沒能捕獲你的錯誤,你也沒有通過查看代碼發現錯誤,有時列印出變數會對你有所協助。最簡單的方法是象下面這樣使用一個alert():
// theGreeting gets a name using getName, then presents
// one or two alert boxes depending on what the name is
//function getName()
{
var first_name = prompt("what's your first name?","");
var last_name = prompt("what's your last name?","");
var the_name = first_name + " " + last_name;
alert("in getName, the_name is: " + the_name);
}
-----------------------------找到錯誤--------------------------------------------------
1.一般性程式錯誤
多數錯誤只是無聊的語法錯誤。記住關閉那些引號,大括弧和小括弧會花費很長時間,不過幸運的是 JavaScript自動錯誤偵測器能捕獲大部分此類錯誤。雖然JavaScript錯誤偵測器隨著日漸複雜的流覽器而不斷完善,但是一些錯誤仍會溜走。下面是一些需要留意的常見錯誤:
2.混淆變數名或函數名
大寫和複數變數和函數名產生的錯誤令人煩惱地經常出現,有時JavaScript錯誤偵測器不能捕獲它們。通過建立和堅持使用一種對變數和函數的命名協定,會大大減少這些麻煩的數量。例如,我全部用小寫字母定義變數,並用底線代替空格(my_variable,the_data, an_example_variable),用內建符號表示函數 (addThreeNumbers(), writeError()等)。我避免使用任何複數,因為我總是忘記那些變數是不是複數。
3.偶然地使用了保留字
一些字不能作為變數名,因為它們已經被JavaScript使用。例如,不能定義一個叫 “if”的變數,因為它實際上是JavaScript的一部分 - 如果使用“if”,你會遇到各種麻煩。當你因為使用命名為“if”的變數而變得瘋狂時,一個叫做“document”的變數是很誘人的。不幸的是,“document”是一個JavaScript對象。另一個經常遇到的問題是把變數命名為“name”(表單元素有“names”屬性)。把變數命名為“name”不會總出問題,只是有時 - 這會更使人迷惑 - 這就是避免使用“name”變數的原因。
不幸的是,不同的流覽器有不同的保留字,所以沒有辦法知道該迴避哪些字。最安全的辦法是避免使用已經成為JavaScript一部分的字和HTML使用的字。如果你因為變數遇到問題,並且不能發現哪兒錯了,試著把變數改個名字。如果成功了,你或許就避開了保留字。
4.記住在邏輯判斷時應該用兩個等號
一些流覽器能捕獲這種錯誤,有些卻不能。這是一種非常常見的錯誤,但是如果流覽器不能替你指出來,你就很難發現。下面是一個這種錯誤的例子:
var the_name = prompt("what's your name?", "");
if (the_name = "the monkey")
{
alert("hello monkey!");
} else {
alert("hello stranger.");
}
這段代碼將產生“hello monkey!”警告對話方塊 - 不管你在提示裡敲的是什麼 - 這不是我們希望的。原因是在if-then語句中只有一個等號,這句話告訴JavaScript你想讓一件事等於另一件。假設你在提示中敲的是 “robbie the robot”。最開始,變數the_name的值是“robbie the robot”,但是隨後if語句告訴JavaScript你想把the_name設為“the monkey.”。於是JavaScript很高興地執行你的命令,送一個“true”訊息給if-then語句,結果警告對話方塊每次都出現“hello monkey!”。這種陰險的錯誤會使你發瘋,所以注意使用兩個等號。
5.偶然給變數加上了引號,或忘了給字串加引號
我不時遇到這個問題。JavaScript區分變數和字串的唯一方法是:字串有引號,變數沒有。下面有一個明顯的錯誤:
var the_name = 'koko the gorilla';
alert("the_name is very happy");