常見的JavaScript錯誤

來源:互聯網
上載者:User

當我們初次嘗試在Web頁面上運行JavaScript時,有可能代碼不會按照設想的那樣工作。這時候我們往往會收到出錯資訊的提示,資訊會告訴我們到底發生了什麼。

 

  指令碼不啟動並執行原因有很多,但是人們在編寫指令碼的時候會出現一些常見的錯誤。事實上,如果我們檢查一下這些常見錯誤,就很有可能發現指令碼不能正常啟動並執行原因或者至少會我們糾正一些錯誤。當然,要發現所有錯誤的可能是很小的,不過一旦糾正常見錯誤,那麼其他錯誤也相對變得容易尋找了。

  到底,我們要檢查的常見錯誤是哪一些呢?要怎樣才能找到這些常見錯誤並將其修複呢?這就是我們這篇文章要講的內容。

  錯誤搭配或錯誤放置的大括弧

  JavaScript使用{}來包含命令。你可以用這對大括弧來包含一組語句。這些命令語句可以視為一個模組,使用多個條件陳述式或者組合迴圈時,這些模組可以相互嵌套。當這些語句的層次分多了,就很有可能出現嵌套錯誤的情況,記住每個{符號都應該有相對應的}符號。

  另一種情況是當我們擁有大量代碼塊嵌套的時候,我們有可能丟失代碼層級的路徑,並將代碼放置在錯誤的層級中,最後導致代碼不能依照預期的情況生效。

  糾正這類由於括弧錯誤匹配造成的問題,最簡單的方法是擷取代碼然後使用一些不同的高亮度標記標出相應對。在代碼的開始端用高亮度標記第一個{符號。然後沿著代碼往下找到同層級的},再用相同的顏色將其高亮度標記出來。然後用另一種顏色高亮度標記下一個{,再用相同的顏色標記下一個},依此類推,相同層級的{}保持相同的顏色,就可以避免出錯了。

  錯誤匹配的引號

  使用HTML和JavaScript,我們可以用(")或(')。當我們的HTML代碼帶有document.write語句時,要在HTML中使用"",在JavaScript中使用''。如果這樣做,就不會出現諸如document.write('< a href="mypage.htm">');因為這個引號完全嵌套在單引號中。

  還有兩種可能的情況。我們可能意外地打上了回括的單引號,導致接下來的語句作為文本字串的一部分結束,因此代碼不能生效。另一種情況是,你或許需要在文本中包含一個真正的單引號。為了不讓帶有文本的單引號語句成為文本的結束,需要在它前面加上一個反斜線來迴避,如document.write('Let/'s go.')。

  意外關閉或忘記關閉引號都會導致代碼失效。我們可以通過代碼列印以及三種高亮度標記來檢查這樣的錯誤。在文本開始端,需要避免歧義的地方,以及文本的末端高亮度標記就可以了。

  條件句中缺少小括弧

  編寫條件陳述式時,需要在條件上使用小括弧。而出現多重條件時,要為每一個條件都括上括弧。在實際操作中,我們很容易忘記將條件括入括弧內,而嵌套層級過多的時候,就更容易弄錯層級。

  解決這一問題的方法與解決大括弧的錯誤匹配類似,只需為沒一個層級的括弧標上不同的顏色以示標記就可以了。

  遺漏的分號

  每一個JavaScript語句都應該以分號結尾。有時,我們看到的JavaScript代碼中每一個語句都單獨成行,而分號與代碼分離了,不過如果我們需要重新整理代碼的時候,將兩個語句放在同一行而忘記為其添加一個分號,就會發現代碼無法生效。

  解決這一問題最簡單的方法是重新格式化代碼,以使每個代碼都以單獨成行的形式出現,並且確保每一行都以分號結束。這樣就可以隨時將代碼結合起來而不會影響其正常運行了。

  大寫匹配錯誤

  JavaScript對於大小寫區分是很敏感的。這意味著myvar和myVar是兩個不同的變數。要避免出現大小寫導致的變數錯誤,建議大家採用標準方法為變數命名,例:統一使用thisIsMyVariable的格式或者this_is_my_variable格式。這樣可以有效區別那些只是在大小寫上有不同的變數,而在尋找錯誤的時候,醒目的格式特點也有利於使用準確的指定尋找。

  如果兩個變數的命名相同還可能出現一種問題,即不是所有的瀏覽器都能正確執行代碼,且有可能視那些僅存在大小寫異同的變數為相同變數,可想而知,那些大寫不正確的代碼將無法在一些瀏覽器中運行。

  在對象載入前引用對象

  頁面標題部分的JavaScript代碼沒有包含在載入頁面前啟動並執行函數之內。頁面內容部分的JavaScript會作為頁面的一部分載入。從裝載事件處理器中調用的JavaScript會在載入完頁面後運行。函數會在JavaScript代碼調用時運行。事件處理器會在相關事件觸發時運行。

  如果JavaScript正通過文件物件模型訪問web頁面的內容,那麼你正引用的那些對象必須在引用前已經載入完畢才可以。引用一個尚未完成載入的對象將出現錯誤。為糾正這一問題,我們應該確保不引用任何來自頁面標題部分JavaScript的對象,除非它包含在頁面完成載入後調用的函數中時。對頁面內容部分JavaScript對象的引用則取決於JavaScript和對象獲得載入速度的順序。最好是將對象的處理情況轉移到頁面裝載事件處理器中。

  預留字作為變數名使用

  對於JavaScript語言來說有一些詞具有特殊含義。這些預定字不能作為變數使用。如果我們不小心將這些預留字作為變數名使用,那麼處理的結果將不盡人意。

  最好的解決方案是熟悉這些預留字列表。如果我們按照適當的命名標準為變數命名,那麼將可以避免把預留字當成變數名的情況,因為標準的命名習慣會阻止我們使用這些預留字。

  函數調用時丟失的參數

  定義函數的時候,我們會定義參數的數量。編寫代碼調用函數時,我們要傳送符合預計的參數。要檢查參數的數量或者檢查代碼發送調用請求後接收參數的時間相對而言都是比較容易的。如果參數已經被賦予了合理的名稱,那麼還應該明顯表示出哪些需要被傳送到每個參數中。

  在這種情況下,如果我們決定向函數添加額外的參數就有可能出現問題。所有對函數的調用現在都需要更新為傳送該額外參數。如果函數是一個連結到許多頁面的外部JavaScript,那就很容易遺漏掉從一個頁面到另一個頁面中對函數的調用。

  不受支援的文檔對象模式

  大多數瀏覽器都支援W3C標準文檔對象模式。假定我們正在使用這些瀏覽器中的一個,那麼我們在瀏覽器中測試被編輯成使用標準DOM的指令碼時,指令碼能正常運行。但是有可能頁面訪問者的瀏覽器版本比較陳舊。如果想要使指令碼也能支援這一部分訪問者,就需要將指令碼編輯成使用跨瀏覽器的DOM。

  有許多舊版本瀏覽器的指令碼可以從互連網下載,當然新的指令碼也同樣可以下載。為了糾正這一錯誤,我們需要重寫指令碼以使用標準DOM或跨瀏覽器DOM。如果指令碼涉及document.all或document.layers,我們就可以辨別出它使用的是舊的DOMs。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.