1. 程式人生 > >javaScript中常見的幾種報錯類型

javaScript中常見的幾種報錯類型

變量類型 最大 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、錯誤舉例
  • 找不到引入的.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時,問題在函數,往往是因為對象被重復定義,或者被重新賦值了。

javaScript中常見的幾種報錯類型