javaScript中常見的幾種報錯類型
阿新 • • 發佈:2018-03-27
變量類型 最大 tro 堆棧 malformed {} 原因 s函數 舉例
一般我們運行代碼的時候,在控制臺報錯會相應的顯示你錯誤的行數,找到那一行,查找你相應的錯誤
1、xxx is not defined
xxx 沒有定義
2、xxx is not a function
xxx 不是一個函數
xxx此時是undefined
3、Cannot read property ‘xxx‘ of undefined
不能讀取undefined的xxx屬性
xxx前面的變量是undefined
4、Cannot set property ‘xxx‘ of null
不能給null設置xxx屬性
xxx前面的變量是null
5、Invalid or unexpected token
標點符號可能是中文
6、Unexpected token a in JSON at position 0
使用JSON.parse進行解析json字符串時,解析的內容不合法
7、XMLHttpRequest cannot load http://XXXXXX. No ‘Access-Control-Allow-Origin‘ header is present on the requested resource. Origin ‘http://XXXXXX‘ is therefore not allowed access.
使用ajax請求數據時,產生跨域了
8、Illegal break statement
出現了非法語句
9、SyntaxError(語法錯誤)
SyntaxError是解析代碼時發生的語法錯誤
// 變量名錯誤
var 1a;
// 缺少括號
console.log (‘hello‘;
10、ReferenceErro(引用錯誤)
ReferenceError是引用一個不存在的變量時發生的錯誤。
unknownVariable
// ReferenceError: unknownVariable is not defined 另一種觸發場景是,將一個值分配給無法分配的對象,比如對函數的運行結果或者this賦值。 console.log() = 1
// ReferenceError: Invalid left-hand side in assignment this = 1
// ReferenceError: Invalid left-hand side in assignment 上面代碼對函數console.log的運行結果和this賦值,結果都引發了ReferenceError錯誤 11、RangeError(範圍錯誤) RangeError是當一個值超出有效範圍時發生的錯誤。主要有幾種情況,一是數組長度為負數,二是Number對象的方法參數超出範圍,以及函數堆棧超過最大值。 new Array(-1)
// RangeError: Invalid array length
(1234).toExponential(21)
// RangeError: toExponential() argument must be between 0 and 20 12、TypeError(類型錯誤) TypeError是變量或參數不是預期類型時發生的錯誤。比如,對字符串、布爾值、數值等原始類型的值使用new命令,就會拋出這種錯誤,因為new命令的參數應該是一個構造函數。 new 123
//TypeError: number is not a func var obj = {}; obj.unknownMethod()
// TypeError: undefined is not a function 上面代碼的第二種情況,調用對象不存在的方法,會拋出TypeError錯誤。 13、URIError(URI錯誤) URIError是URI相關函數的參數不正確時拋出的錯誤,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()這六個函數。 decodeURI(‘%2‘) // URIError: URI malformed 14、EvalError(eval錯誤) eval函數沒有被正確執行時,會拋出EvalError錯誤。該錯誤類型已經不再在ES5中出現了,只是為了保證與以前代碼兼容,才繼續保留。 以上這6種派生錯誤,連同原始的Error對象,都是構造函數。開發者可以使用它們,人為生成錯誤對象的實例。 new Error("出錯了!"); new RangeError("出錯了,變量超出有效範圍!"); new TypeError("出錯了,變量類型無效!"); 上面代碼表示新建錯誤對象的實例,實質就是手動拋出錯誤。可以看到,錯誤對象的構造函數接受一個參數,代表錯誤提示信息(message)。 15、錯誤舉例
// ReferenceError: unknownVariable is not defined 另一種觸發場景是,將一個值分配給無法分配的對象,比如對函數的運行結果或者this賦值。 console.log() = 1
// ReferenceError: Invalid left-hand side in assignment this = 1
// ReferenceError: Invalid left-hand side in assignment 上面代碼對函數console.log的運行結果和this賦值,結果都引發了ReferenceError錯誤 11、RangeError(範圍錯誤) RangeError是當一個值超出有效範圍時發生的錯誤。主要有幾種情況,一是數組長度為負數,二是Number對象的方法參數超出範圍,以及函數堆棧超過最大值。 new Array(-1)
// RangeError: Invalid array length
(1234).toExponential(21)
// RangeError: toExponential() argument must be between 0 and 20 12、TypeError(類型錯誤) TypeError是變量或參數不是預期類型時發生的錯誤。比如,對字符串、布爾值、數值等原始類型的值使用new命令,就會拋出這種錯誤,因為new命令的參數應該是一個構造函數。 new 123
//TypeError: number is not a func var obj = {}; obj.unknownMethod()
// TypeError: undefined is not a function 上面代碼的第二種情況,調用對象不存在的方法,會拋出TypeError錯誤。 13、URIError(URI錯誤) URIError是URI相關函數的參數不正確時拋出的錯誤,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()這六個函數。 decodeURI(‘%2‘) // URIError: URI malformed 14、EvalError(eval錯誤) eval函數沒有被正確執行時,會拋出EvalError錯誤。該錯誤類型已經不再在ES5中出現了,只是為了保證與以前代碼兼容,才繼續保留。 以上這6種派生錯誤,連同原始的Error對象,都是構造函數。開發者可以使用它們,人為生成錯誤對象的實例。 new Error("出錯了!"); new RangeError("出錯了,變量超出有效範圍!"); new TypeError("出錯了,變量類型無效!"); 上面代碼表示新建錯誤對象的實例,實質就是手動拋出錯誤。可以看到,錯誤對象的構造函數接受一個參數,代表錯誤提示信息(message)。 15、錯誤舉例
- 找不到引入的.js文件
- js函數缺少括號),函數體缺少大括號}
- css代碼使用了//註釋,導致有的div內容出不來,然後也不報錯
- 定義了多個同名的變量
- 文檔未加載完畢,就開始執行js代碼導致的錯誤
- js 對象的函數未定義
javaScript中常見的幾種報錯類型