1.錯誤分為兩種:
(1)代碼錯誤:這種錯誤瀏覽器會報錯,可以根據錯誤類型去排錯
(2)邏輯錯誤:這種錯誤瀏覽器不會報錯,但是可以使用斷點進行調試排錯
2.代碼錯誤類型
2.1語法錯誤:
即寫的代碼不符合js編碼規則 報錯為:Uncaught Syntaxerror:信息提示;我們可以根據后面的信息提示去修改錯誤,當然,語法錯誤,瀏覽器會直接報錯,整個代碼都不會執行。
2.2引用錯誤:
使用了沒有定義的變量 報錯為:Uncaught ReferenceError:信息提示;錯誤之前的代碼會執行,之后代碼不會執行
2.3類型錯誤:
提供的類型,不是js所需要的; 報錯為:Uncaught TypeError:信息提示;錯誤之前的代碼會執行,之后代碼不會執行
2.4范圍錯誤:
指定的范圍不是JS要求的 報錯為:Uncaught RangeError:信息提示;錯誤之前的代碼會執行,之后代碼不會執行 3.邏輯錯誤 這類錯誤可能是邏輯順序不正確,這種錯誤瀏覽器不會報錯,我們可以通過斷點調試排除錯誤
JS常見的報錯類型
1.Uncaught TypeError: Cannot read property '' of undefined
常見的一種是在渲染 UI 組件時對於狀態的初始化操作不當,當你讀取一個未定義的對象的屬性或調用其方法時,這個錯誤會在 Chrome 中出現。
2.TypeError: ‘undefined’is not an object
這是在 Safari 中讀取屬性或調用未定義對象上的方法時發生的錯誤,Safari 使用了不同的錯誤消息提示語。
3.TypeError: 'null' is not an object
這是在 Safari 中讀取屬性或調用空對象上的方法時發生的錯誤,Safari 使用了不同的錯誤消息提示語。undefined 通常是一個尚未分配的變量,而 null 表示該值為空。 要驗證它們不相等,請嘗試使用嚴格的相等運算符 ===
這種錯誤可能發生場景是:在加載元素之前嘗試在 JavaScript 中使用元素。 因為 DOM API 對於空白的對象引用返回值為 null。
4.(unknown): Script error
當未捕獲的 JavaScript 錯誤(通過window.onerror處理程序引發的錯誤,而不是捕獲在try-catch中)被瀏覽器的跨域策略限制時,會產生這類的腳本錯誤。這是一種瀏覽器安全措施,旨在防止跨域傳遞數據,否則將不允許進行通信。
5.TypeError: Object doesn’t support property
這是您在調用未定義的方法時發生在 IE 中的錯誤。 您可以在 IE 開發者控制台中進行測試。
6.TypeError: ... is not a function
調用未定義的函數時,在 Chrome 中產生的錯誤
7.Uncaught RangeError: Maximum call stack
當你調用一個不終止的遞歸函數時或者將值傳遞給超出范圍的函數,會報出的錯,檢查函數的遞歸調用,確保函數不是無限遞歸的
8. TypeError: Cannot read property ‘length’of undefined
因為讀取未定義變量的長度屬性,通常會在數組中找到定義的長度,但是如果數組未初始化或者變量名稱在另一個上下文中隱藏,則可能會遇到此錯誤。
var testArray = ["Test"]; function testFunction(testArray) { for (var i = 0; i < testArray.length; i++) { console.log(testArray[i]); } } testFunction();
當你用參數聲明一個函數時,這些參數變成了函數作用域內的本地參數。這意味着即使你函數外有名為 testArray 的變量,在一個函數中具有相同名字的參數也會被視為本地參數。
9.Uncaught TypeError: Cannot set property ... of undefined
嘗試訪問一個未定義的變量時,它總是返回 undefined,我們不能獲取或設置任何未定義的屬性。
10.ReferenceError: ... is not defined
當您嘗試訪問未定義的變量或超出當前范圍的變量時,會引發此錯誤。
11.Uncaught exception: ReferenceError: Cannot assign to ‘this’
嘗試給一個不能被賦值的變量賦值時將發生該錯誤,確保不給函數函數的返回值或 this 關鍵字賦值。
12.Uncaught TypeError: Converting circular structure toJSON
該錯誤總是發生在使用 JSON.stringify 序列化一個存在循環引用的對象時,移除將要被轉換為 JSON 字符串對象內部的循環引用。
13.Unexpected token ;
通常發生在缺少括號或分號時,該錯誤提示的行號有時並不能指向正確的位置
14.Uncaught SyntaxError: Unexpected token ILLEGAL
字符串字面量缺少閉合的引號,確保所有字符串都包含閉合的引號。
資源搜索網站大全 https://www.renrenfan.com.cn 廣州VI設計公司https://www.houdianzi.com
接下來,詳細說明各種類型:
1.Error:基類型。所有的錯誤都繼承該類型。提供這個基類型的主要目的是提供給開發人員拋出自定義的錯誤(如:throw new Error(輸出錯誤信息))。
2.EvalError:使用eval()函數會拋出該錯誤。例如未將eval當作函數使用,例如 new eval()。
3.RangeError: 數字超出范圍會拋出該錯誤。例如,數組越界。
4.ReferenceError:在找不到對象會拋出錯誤。例如 var obj = undefineObj,undefineObj未定義會報錯。
5.SyntaxError:語法錯誤。
6.TypeError:類型錯誤。通常在if控制流中和全等,相等的比較中存在類型轉換。
7.URLError:使用eccodURL和decodeURL(),而URI格式不正確時,會導致錯誤。這個類型不常用。
錯誤的理解
接着,簡單的描述一下對錯誤的理解:
錯誤主要出現在if控制流,類型轉換和對於空值為進行判斷,字段未定義等。在編寫代碼時一定要從正反兩個角度考慮。不能單從正確的角度考慮,只有這樣才可以保證代碼的健壯性。
最后,了解錯誤的使用方法:
throw 錯誤信息
throw new Error(錯誤信息)
throw new RangeError(錯誤信息,其他5種省略)
