JavaScript編程中會出現的錯誤類型有哪些?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
下面我們來看看在編譯是會發現的JavaScript錯誤是什么?
一、語法錯誤(Syntax Errors)
語法錯誤,也稱為解析錯誤,會發生在傳統編程語言的編譯和JavaScript的解析時。
例1,以下行導致語法錯誤,因為它缺少右括號。
<script type="text/javascript"> // window.print(; </script>
例2:
123consloe.log(123) // 未捕獲的語法錯誤:意外標識符 console.123) // 未捕獲的語法錯誤: 出乎意料的數字
當JavaScript中出現語法錯誤時,只有與語法錯誤包含在同一線程中的代碼才會受到影響,而其他線程中的其余代碼將被執行,假設它們中的任何內容都不依賴于包含錯誤的代碼。
二、運行時錯誤(Runtime Errors)
運行時錯誤(也稱為異常)是在JavaScript執行期間(編譯/解釋之后)發生的錯誤。
1、引用錯誤(ReferenceError)
ReferenceError:引用一個不存在的變量時發生的錯誤;將一個值分配給無法分配的對象,比如對函數的運行結果或者函數賦值就會發生的錯誤。
例如下面的情況:
// 引用了不存在的變量 a() // 未定義引用錯誤:a 未定義 console.log(b) // 未引用引用錯誤:b未定義 // 給一個無法被賦值的對象賦值 console.log("abc") = 1 // 未引用引用錯誤:左側賦值無效
2、范圍錯誤(RangeError)
RangeError:是一個在超出有效范圍時會發生的錯誤。主要有以下幾種情況:
1)、當數組長度為負數時,發生錯誤;
2)、當Number對象的方法參數超出范圍時,發生錯誤;
3)、當函數堆棧超過最大值時,發生錯誤。
例如下面的情況:
// 數組長度為負數 [].length = -5 // 范圍錯誤:無效的數組長度 // Number對象的方法參數超出范圍 var num = new Number(12.34) console.log(num.toFixed(-1)) // 范圍錯誤: 在Number.toFixed中,toFixEd()的數字參數必須在0到20之間。 // 說明: toFixed方法的作用是將數字四舍五入為指定小數位數的數字,參數是小數點后的位數,范圍為0-20.
3、類型錯誤( TypeError)
TypeError:變量或參數不是預期類型時發生的錯誤。
例:在使用new字符串、布爾值等原始類型和調用對象不存在的方法就會拋出這種錯誤,因為new命令的參數應該是一個構造函數。
// 調用不存在的方法 123() // 類型錯誤: 123不是一個函數 var o = {} o.run() // 類型錯誤: o.run 不是一個函數 // new關鍵字后接基本類型 var p = new 456 // 類型錯誤: 456 不是構造函數
4、URIError:URL相關函數錯誤使用
URIError:主要是URL相關函數的參數不正確。
例如下面的情況:
decodeURI("%1") // URIError: 在解碼過程中變形了的URI
URI相關參數不正確時拋出的錯誤,主要涉及以下六個函數:
encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()
5、EvalError:eval()函數執行錯誤
EvalError:在ES5以下的JavaScript中,當eval()函數沒有被正確執行時,會拋出evalError錯誤。
例如下面的情況:
var myEval = eval; myEval("alert('call eval')");
需要注意的是:ES5以上的JavaScript中已經不再拋出該錯誤,但依然可以通過new關鍵字來自定義該類型的錯誤提示。
三、邏輯錯誤
邏輯錯誤可能是最難追蹤的錯誤類型。這些錯誤不是語法或運行時錯誤的結果。相反,當你在驅動你的腳本的邏輯中犯了錯誤并且你沒有得到你期望的結果時,它們會發生。
看完上述內容,你們掌握JavaScript編程中會出現的錯誤類型有哪些的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。