前端常見報錯原因詳解


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM