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、錯誤舉例
找不到引入的.js文件
引用的.js文件找不到,chrome報錯信息如下:
GET file:///D:/JavaBooks/js/jquery%20validation/src-gzh/jquery.validate-1.7.src net::ERR_FILE_NOT_FOUND
可能原因:.js文件名字拼寫錯誤(比如,少了文件后綴.js)
js函數缺少括號),函數體缺少大括號}
如果函數缺少括號或者函數體缺少括號,瀏覽器debug時都會提示報錯信息。這里分2種情況:
1、一般報錯信息都在報在錯誤的地方,這種情況比較好說。
2、但是有的時候會報在其他的地方,這個時候要明白的是,報錯信息缺少括號這一點是確定無疑的,現在就是要定位到具體是哪一行報錯。
例如
報錯函數/函數體缺少括號,報錯的地方不是函數/函數體的末尾,而是報在調用該函數的地方。
css代碼使用了//注釋,導致有的div內容出不來,然后也不報錯
css注釋,只能使用/* 注釋內容 */,而不能使用雙斜杠//。
定義了多個同名的變量
瀏覽器會報錯。
文檔未加載完畢,就開始執行js代碼導致的錯誤
文檔/DOM未加載完畢,就開始執行js代碼。
比如,js代碼寫在html代碼的前面,而且document.getElementById('traffic')這樣來訪問DOM(即文檔的元素),那么這個時候就會報TypeError: a is null(火狐瀏覽器,注:a變量沒用,只會起誤導作用)或者Uncaught TypeError: Cannot read property 'click2' of null(谷歌瀏覽器)。
js 對象的函數未定義
瀏覽器報錯,說對象的函數未定義,這個時候可以肯定的一點是,當前這個對象是沒有這個函數的。
比如,高德地圖對象函數未定義,是因為地圖對象被2.5維地圖對象覆蓋了。
出現這種bug時,問題在函數,往往是因為對象被重復定義,或者被重新賦值了。
原文:https://blog.csdn.net/zuggs_/article/details/80747979