JavaScript除錯常見報錯以及原因
轉載自這篇文章
- Error 錯誤
- EvalError 全域性錯誤
- RangeError 引用錯誤
- ReferenceError 引數錯誤
- SyntaxError 語法錯誤
- TypeError 型別錯誤
- URIError 編碼錯誤
其中, Error 是基型別,其他錯誤型別都繼承自該型別。因此,所有錯誤型別共享了一組相同的屬性(錯誤物件中的方法全是預設的物件方法) 。 Error 型別的錯誤很少見,如果有也是瀏覽器丟擲的,這個基型別的主要目的是供開發人員丟擲自定義錯誤。
EvalError 型別的錯誤會在使用 eval() 函式而發生異常時被丟擲。ECMA-262 中對這個錯誤有如下描述: “如果以非直接呼叫的方式使用 eval 屬性的值(換句話說,沒有明確地將其名稱作為一個Identifier ,即用作 CallExpression 中的 MemberExpression ) ,或者為 eval 屬性賦值。 ”簡單地說,如果沒有把 eval() 當成函式呼叫,就會丟擲錯誤,例如:
new eval(); //丟擲 EvalError eval = foo; //丟擲 EvalError
在實踐中,瀏覽器不一定會在應該丟擲錯誤時就丟擲 EvalError 。例如,Firefox 4+和 IE8 對第一種情況會丟擲 TypeError ,而第二種情況會成功執行,不發生錯誤。有鑑於此,加上在實際開發中極少會這樣使用 eval() ,所以遇到這種錯誤型別的可能性極小。其他型別錯誤在接下來會詳細說明。
錯誤型別:
(
型別錯誤)
物件用來表示值的型別非預期型別時發生的錯誤
錯誤原因:
當傳入函式的運算元或引數的型別並非操作符或函式所預期的型別時,將丟擲一個 TypeError
(一)
錯誤資訊:
TypeError: undefined
is not a function (Firefox)
Uncaught TypeError: undefined is not a function (Chrome)
錯誤分析:
Uncaught TypeError:
這部分資訊通常不是很有用。Uncaught
表示錯誤沒有被
catch
語句捕獲,TypeError
是錯誤的名字。
undefined is not a function:
這部分資訊,你必須逐字閱讀。比如這裡表示程式碼嘗試使用 undefined
,把它當做一個函式。
錯誤例項:
/* * 當嘗試呼叫一個像方法的值時,這個值並不是一個方法 */ var foo = undefined; foo(); //Uncaught TypeError: foo is not a function /* * 當嘗試呼叫一個物件的方法時,輸錯了名字,也會觸發這個錯誤提示 */ var x = document.getElementByID('foo'); //Uncaught TypeError: document.getElementByID is not a function
(二)
錯誤資訊:
TypeError: foo is not a function (Firefox)
Uncaught TypeError: Cannot read property 'foo' of null (Chrome)
錯誤分析:
Uncaught TypeError:
這部分資訊通常不是很有用。Uncaught
表示錯誤沒有被
catch
語句捕獲,TypeError
是錯誤的名字。
undefined is not a function:
這部分資訊,你必須逐字閱讀。比如這裡表示程式碼嘗試使用 undefined
,把它當做一個函式。
錯誤例項:
/*
* 嘗試讀取 null
或者 undefined
,把它當成了物件
*/
var someVal = null;
console.log(someVal.foo);
錯誤型別:
物件表明一個不存在的變數被引用。
錯誤原因:
當你嘗試引用一個未被定義的變數時,將會丟擲一個 ReferenceError引用錯誤
。
錯誤資訊:
ReferenceError: invalid assignment left-hand side (Firefox)
Uncaught ReferenceError: Invalid left-hand side in assignment (Chrome)
錯誤例項:
/*
* 嘗試給不能賦值的東西賦值,引起錯誤
* “left-hand side in assignment” 提及了等號左手邊的部分,因為左手邊包含不能賦值的東西
*/
function doSomething(){};
if(doSomething() = 'somevalue'){}
;
/*
* 當嘗試呼叫一個物件的方法時,輸錯了名字,也會觸發這個錯誤提示
*/
var x = document.getElementByID('foo'); //Uncaught TypeError: document.getElementByID is not a function
錯誤型別:
錯誤資訊:
RangeError: invalid array length (Firefox)
RangeError: Invalid array length (Chrome)
RangeError: Invalid array buffer length (Chrome)
錯誤原因:
試圖傳遞一個number引數給一個範圍內不包含該number的函式時則會引發RangeError。當傳遞一個不合法的length值作為Array
構造器的引數建立陣列,或者傳遞錯誤值到數值計算方法(Number.toExponential()
,Number.toFixed()
,Number.toPrecision()
),會出現RangeError。
錯誤例項:
/* * Array 和 ArrayBuffer 的 length(長度) 屬性被定義為一個32位無符號整形(unsigned 32-bit integer)的值,所以它只能儲存 0 - 232-1 之間的數。 * 當建立一個長度為負數或者長度大於等於232 的Array
或者ArrayBuffer
時,或者當設定Array.length
屬性為負數或者長度大於等於232 的時候就會觸發這個錯誤 */ new Array(Math.pow(2, 40)) new Array(-1) new ArrayBuffer(Math.pow(2, 32)) new ArrayBuffer(-1) let a = []; a.length = a.length - 1; // 將 length 屬性的值設定為 -1 let b = new Array(Math.pow(2, 32) - 1); b.length = b.length + 1; // 將 length 屬性的值設定為 2^32
錯誤型別:
錯誤原因:
SyntaxError
物件代表嘗試解析語法上不合法的程式碼的錯誤。當Javascript語言解析程式碼時,Javascript引擎發現了不符合語法規範的tokens或token順序時丟擲SyntaxError
。可能是丟失運算子或者轉義字元等。
錯誤例項
/* * 因為沒有使用 ”+“ 操作符來連線字串,JavaScript 認為log
函式的引數的值只是 “PI: ”,在這種情況下,它應該用一個右括號作為結束。
*/console.log("PI: " Math.PI);
//Uncaught SyntaxError: missing ) after argument list /* * 一個字串字面量少了結尾的引號 */ var a='sd; //Uncaught SyntaxError: Invalid or unexpected token
如何解決:
[ ]
{ }
( )
這幾個符號不配對常常導致出錯。檢查所有的圓括號和方括號是否配對。行號指出的不僅是問題字元。
Unexpected /
跟正則表示式有關。此時行號通常是正確的。
Unexpected ;
物件或者陣列字面量裡面有個;通常引起這個錯誤,或者函式呼叫的引數列表裡有個分號。此時的行號通常也是正確的。
相關推薦
JavaScript除錯常見報錯以及原因
轉載自這篇文章 Error 錯誤EvalError 全域性錯誤RangeError 引用錯誤ReferenceError 引數錯誤SyntaxError 語法錯誤TypeError 型別錯誤URIError 編碼錯誤 其中, Error 是基型別,其他錯誤型別都繼承自該
JavaScript 除錯常見報錯以及原因
在程式開發中難免會遇到一些錯誤,在成千上萬的程式碼中去尋找錯誤很明顯相當於大海撈針,為此,每種計算機程式語言都要它獨特的一套錯誤處理與除錯機制。當然,JavaScript也不例外。但是,接觸過javascript的人都知道,在除錯js的過程中有時候真想砸電腦。因為在除錯的過程中,控制檯給出的錯誤非常難以理
JavaScript 除錯常見報錯以及修復方法
JavaScript 除錯是一場噩夢:首先給出的錯誤非常難以理解,其次給出的行號不總有幫助。有個查詢錯誤含義,及修復措施的列表,是不是很有用? 以下是奇怪的 JavaScript 錯誤列表。同樣的錯誤,不同的瀏覽器會給出不同的訊息,因此有一些不同的例子。 如何讀懂錯誤
Python基礎學習篇-7 各種常見報錯及原因----【不定時補充】
1、TypeError: int(x) argument must be a string, a bytes-like object or a number, not 'NoneType' 此報錯是因為使用 int() 函式進行強制型別轉換時,要求引數x必須是字串、位元組物件、數字,不能是其它的
ubuntu使用apt命令常見報錯以及解決方案
報錯: E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory
rabbitmq編譯部署以及常見報錯
ffline 主機 copy don sna 第一個 輸出 3.2 can (一)源碼安裝Erlang(1)下載erlang源碼包wget http://www.erlang.org/download/otp_src_R13B04.tar.gz(2)解壓縮erlang源碼包
使用mina傳遞物件注意問題點以及常見報錯異常處理
最常見的異常,一個是不能序列化java.io.NotSerializableException:,另一個就是java.io.InvalidClassException,還有java.nio.charset.MalformedInputException 1. 首先是客戶端和服務
Carthage的安裝和使用,以及常見報錯解決
1、Carthage簡單概念介紹以及與Cocopods的區別:github地址 參考博文地址 Carthage 類似於 CocoaPods,為使用者管理第三方框架和依賴,但不會自動修改專案檔案和生成配置 Carthage 是去中心化的依賴管理工具,安裝依賴時不需要去中心倉
Java向Mysql資料庫中儲存圖片等二進位制檔案的實現,以及常見報錯的解決!
Mysql資料庫的功能很強大,除了能儲存字元等常見資料以外,它同樣可以儲存圖片等二進位制檔案,本文以儲存照片為例。 一、Mysql儲存二進位制檔案常見報錯有: 1.com.mysql.jdbc.PacketTooBigException: Packet for query
Maven常見報錯原因及解決方案
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? 解決方法 問題是將JRE作為JDK使用了,解決辦法是安裝JD
(原創)常見報錯不常見原因之——org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
錯誤日誌:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)..... 常見原因:由於myb
struts2學習筆記——常見報錯及解決方法匯總(持續更新)
允許 clip 之間 con ack 技術 ext tro height 操作環境:(1)Tomcat 7.0.72.0 (2)OS Name: Windows 7 (3)JVM Version: 1.8.0_25-b18 (4)e
JS常見報錯與修復
移除 except 一個 symbol emp 單個 aam 找到 函數 如何讀懂錯誤? 首先,讓我們快速看下錯誤信息的結構。理解結構有助於理解錯誤,如果遇到列表之外的錯誤會減少麻煩。 Chrome 中典型的錯誤像這樣: Uncaught TypeError: undefi
Hexo 搭建博客 本地運行 常見報錯及解決辦法
render error: 錯誤 exp 手動配置 fig.yml 文件中 size server 作為一名在hexo方面的新手,我在使用hexo編輯文檔時遇到了很多問題,hexo generate編譯的時候遇到了各種錯誤。 在此將這些錯誤及其解決方案記錄下來,以便日後查證
mybatis--Mapper 常見報錯總結(持續總結)
例如 ins nts 需要 重復 tty collect per 檢查 本文版權歸 遠方的風lyh和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。 1.The content of elements must consist of well-fo
common 包引入常見報錯
int jar包 -c obj arr 參考 新版 trac except 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 缺少相應jar包都會有異常,根據異常找jar包導入...... 這裏我說下lang包,因為這個包我找了好半天: 我用的是: c
Appium常見報錯問題解決方法-2
ron authorize 點擊 設備 auth .so 方案 成功 正常 上一篇記錄了部分Appium報錯的解決方案,現在繼續記錄 4、運行閃退 直接如上運行,閃退。 解決方法: 運行前,要先啟動Appium客戶端,之後再運行腳本,就不會出現這個問題。 5.socke
Entity Framework——常見報錯總結
container mysq 詳細 exceptio 並發 ner req 相同 () 1 實體屬性配置為IsRequired()對更新的影響 拋出異常類型DbEntityValidationException 表結構: 實體: public class User
MySQL主從同步常見報錯的解決辦法2
MySQL ERROR 1872 報錯截圖如下:該報錯屬於SQL線程報錯,原因是relay -index.index 和relay-log裏面的文件路徑對應不上。解決辦法: mysql> stop slave;mysql> reset slave;重新指定主庫信息mysql> ch
使用iis7.5搭建ASP網站常見報錯問題處理
配置 info ont 設置 發布 問題處理 ID 直接 class iis7.5 解析 ASP 出錯主要有三類: 1. 權限問題 2. 程序問題 3. 應用池問題 1. 權限問題: 如果訪問網站後有典型的無權查看報錯提醒, 那麽重新配置相關用戶的權限即可, 最簡單的辦