一、JavaScript運行錯誤
JavaScript 運行時錯誤是指當 JavaScript 腳本試圖執行一個系統不能運行的動作時導致的錯誤。當正在運行腳本、計算變量表達式、或者正在動態分配內存時出現 JavaScript 運行時錯誤時。
錯誤號 | 錯誤描述 | 解析 |
---|---|---|
5029 | 數組長度必須爲一有限正整數 | 在調用 Array 構造函數時使用的參數不是自然數(所謂自然數就是零加上正整數集合)。 |
5030 | 必須賦給數組長度一個有限正數 | 在對現有 Array 對象設置其 length 屬性時,所指定的數組長度不是正整數,也不是零。如果給某個 Array 對象的 length 屬性所賦的值時爲負數或不是數值 (NaN) 時,就會產生這個錯誤。請注意 JavaScript 會自動將小數數值轉換爲整數。 |
5028 | 需要 Array 或 arguments 對象 | 沒有將數組作爲參數。這個錯誤只在 Function.prototype.apply方法中發生。如果使用這個函數,則該函數的第二個參數要麼是 Array 對象,要麼是 Arguments 對象。 |
5010 | 需要 Boolean | 試圖用一個不是 Boolean 類型的對象來調用 Boolean.prototype.toString 或者 Boolean.prototype.valueOf 方法。這種調用類型的對象必須是 Boolean 類型。 |
5003 | 不能給函數返回值賦值 | 試圖將一個值賦給函數結果。可以將函數結果賦給某個變量,但其本身不能用作變量。如果希望將一個新值賦給該函數本身,則不要圓括號(函數調用操作符)。 |
5000 | 不能給 'this' 賦值 | 試圖給 this 賦值,this 是 JavaScript 關鍵字,表示: 當前正在執行某個方法的對象, 如果沒有當前方法(或該方法不屬於任何其它對象),則是指全局對象。 所謂方法就是由對象調用的 JavaScript 函數。在一個方法內, this 關鍵字代表調用該方法的對象的引用(這種情況下,就是指使用 new 操作符調用類構造函數所創建的對象)。在一個方法內可以使用 this 來引用當前對象,但不能對其賦予新的值。 |
5006 | 需要 Date 對象 | 試圖對一個不是Date 類型的對象調用 Date.prototype.toString 或 Date.prototype.valueOf 方法。這種調用類型的對象必須是 Date 類型。 |
5015 | 需要 Enumerator 對象 | 試圖對一個非 Enumerator 類型的對象調用 Enumerator.prototype.atEnd、 Enumerator.prototype.item、 Enumerator.prototype.moveFirst 或者 Enumerator.prototype.moveNext 方法。這種調用類型的對象必須是 Enumerator 類型。 |
5022 | 異常拋出,但無法抓住 | 在代碼中包括了一條 throw 語句,但沒有將其包含在某個 try 語句塊內,或者沒有相關的 catch 語句塊來捕獲錯誤。異常是在 try 語句塊中使用 throw 語句被拋出,並且應該由 try 語句塊外的 catch 語句抓住。 |
5020 | 正則表達式中缺少“)” | 試圖創建一個正則表達式捕獲、斷言和組合,但不包括結束圓括號。正則表達式中的圓括號有多個用途。首先,它們主要用來抓捕子表達式,指定斷言、或將模式組合,從而通過 *、+、? 等等使這些項被看作一個單一的單位。 |
5019 | 正則表達式中缺少“]” | 試圖創建一個用於正則表達式匹配的字符類,但是沒有右中括號。單個的文字字符組合可以用括號括起來表示一個字符類。一個字符類可以匹配其中包含的任一字符。例如,/abc]/ 可以匹配字母 “a”, “b”, 或 “c” 的任何一個。 |
5023 | 函數沒有合法的 Prototype 對象 | 試圖使用 instanceof 來確定一個對象是否是從某個特定函數類派生而來,但重新定義的該對象的prototype 屬性要麼是空的,要麼是外部對象類型(都不是有效的JavaScript 對象)。外部對象可能來自主機對象模型(例如, Internet Explorer 的產品和 window 產品,或一個外部的COM 對象)。 |
5002 | 需要 Function 對象 | 試圖對一個不是 Function 對象調用 Function prototype 方法,或者在函數調用上下文中使用了對象。 |
5008 | 非法賦值 | 試圖對一個只讀的標識符賦值。不能對只讀的標識符賦值。例如,主機定義對象和外部 COM 對象。 |
5021 | 字符集範圍無效 | 試圖創建的正則表達式含有無效的字符集範圍。字符集的範圍必須只能是單個字符的變化,諸如a-z 或 0-9;不能在字符集中包括諸如 \w 的字符類。字符集範圍的第一個字符也必須位於範圍中第二個字符的前面。 |
5014 | 需要 JavaScript 對象 | 試圖將一個非-JavaScript 對象傳給需要 JavaScript對象的內置函數。各種內置函數都需要在 JavaScript 中定義的對象(與主機定義的對象和控件之類的外部組件相對)。 |
5001 | 需要 Number 類型 | 試圖對一個不是Number 類型的對象調用 Number.prototype.toString 或 Number.prototype.valueOf 方法。這種調用類型的對象必須是Number 類型。 |
5007 | 需要 Object 類型 | 試圖對一個不是Object 類型的對象調用 Object.prototype.toString 或Object.prototype.valueOf 方法。這種調用類型的對象必須是 Object 類型。 |
5012 | 需要對象的成員 | 試圖對某個對象的數據成員執行某個操作,但該成員不存在。 |
5016 | 需要正則表達式對象 | 試圖對RegExp類型對象之外的其他對象調用 RegExp.prototype.toString 或 RegExp.prototype.valueOf方法。這種調用的類型必須是 RegExp 對象。 |
5005 | 需要 String | 試圖對String對象類型之外的其他類型對象調用String.prototype.toString 或 String.prototype.valueOf 方法。這種調用的類型必須是 String 類型。 |
5017 | 正則表達式語法錯誤 | 查找字符串的結構違反了一條或多條關於 JavaScript 正則表達式的語法規則。 |
5026 | 小數部分的位數越界 | 試圖將一個非法參數傳遞給Number.prototype.toExponential()。函數toExponential() 的參數爲 0 到 20(含 20)之間。 |
5027 | 精度越界 | 試圖將一個非法參數傳遞給 Number.prototype.toPrecision。 給 toPrecision 的參數必須爲 1 到 21(含21)之間。 |
5025 | 待解碼的 URI 編碼非法 | 試圖對一個不正確 URI(通用資源標識符)進行解碼。URI 具有特殊的語法;絕大多數非字母數字字符在用於 URI 必須加以編碼。可以使用 encodeURI 和 encodeURIComponent 方法從一個標準的 JavaScript 字符串創建一個 URI。 |
5024 | 待解碼的 URI 包含有非法字符 | 試圖將字符串編碼得到 URI(通用資源標識符),但是包含非法字符。儘管字符串中的絕大多數字符都是合法的,可以轉換爲 URI,但有些 Unicode 字符序列是非法的。 |
5009 | 未定義標識符 | JavaScript 編譯器不認識試圖使用的標識符。當出現下述情況時,返回未定義值: 不存在的變量;變量已聲明,但從未對其賦值;對象屬性不存在。 |
5018 | 未預期的限定符 | 在組織正則表達式的查找模式時,創建了一個帶有非法循環因子的模式元素。 |
5013 | 需要 VBArray | 所提供的對象不是所需要的 Visual Basic 中的 safeArray。new VBArray(safeArray);VBArrays 是隻讀的,且不能直接被創建。safeArray 參數爲一個 VBArray 值,並且在被傳遞給 VBArray構造函數之前必須獲得一個 VBArray 值。這個值只能通過檢索現有的 ActiveX 或其他對象得到。 |
二、JavaScript語法錯誤
JavaScript 語法錯誤是指當 JavaScript 語句違反了 JavaScript 腳本語言的一條或多條語法規則時導致的錯誤。JavaScript 語法錯誤發生在程序編譯階段,在開始運行該程序之前。
錯誤號 | 錯誤描述 | 解析 |
---|---|---|
1019 | 在循環外不能有“break” | 試圖在循環外使用 break 關鍵詞。break 關鍵詞用來結束一個循環或 switch 語句。它必須位於循環體內或 switch 語句內。例外:break 關鍵字後面可以帶一個標籤。如:break labelname; 只有在嵌套式循環或 switch 語句中並且需要跳出的循環不是最內層循環時,才需要使用這種帶標籤形式的break 關鍵詞。 |
1020 | 在循環外不能有“continue” | 試圖在循環外使用 continue 語句。只有在下述語句內纔可以使用 continue 語句: do-while 循環, while 循環, for 循環, for/in 循環。 |
1030 | 條件編譯已關閉 | 在沒有先啓用條件編譯的情況下試圖使用條件編譯變量。打開條件編譯將告訴 JavaScript 編譯器要解釋那些以 @ 開頭作爲條件編譯變量的標識符。 |
1027 | 一條 “switch” 語句中只能有一個 “default” | 在一個 switch 語句中試圖使用多個 default 語句。Default分支總是位於 switch 語句的最後一個分支語句(也就是匹配失敗的情形)。 |
1005 | 需要“(” | 試圖用一組圓括號來括住一個表達式,但缺少開始圓括號。有些表達式必須用一組開始圓括號和結束圓括號括住。 |
1006 | 需要“)” | 試圖用一組圓括號來括住一個表達式,但缺少結束圓括號。有些表達式必須用一組開始圓括號和結束圓括號括住。 |
1012 | 需要“/” | 試圖創建一個正則表達式文字,但沒有包括其中的斜槓 (/)。正如字符串文字表示爲一對單引號內的字符一樣,正則表達式文字則表示爲一對斜槓 (/) 內的字符。 |
1003 | 需要“:” | 試圖創建一個使用三目條件運算符的表達式,但是在第二操作數和第三操作數之間沒有包括冒號。三目(三個操作數)條件操作符在第二個(爲真)和第三個(爲假)操作數之間一定要有一個冒號。 |
1004 | 需要“;” | 試圖在一行內寫多條語句,但沒有用分號將各條語句加以分隔。分號是用來結束語句的。可以在一行內寫多條語句,不過每條語句後都必須加分號以便分開。 |
1032 | 需要“@” | 試圖使用 @set 語句創建一個用於條件編譯語句的變量,但在變量名稱前沒有 @ 符號。 |
1029 | 需要“@end” | 試圖創建一個條件編譯的代碼塊,但在最後沒有@end 語句。通過把JavaScript 語句放在 @if/@end 塊內,可以實現條件編譯。 |
1007 | 需要“]” | 引用數組元素時缺少右中括號。引用數組元素的任何表達式都必須包括左中括號和右中括號。 |
1008 | 需要“{” | 沒有用左大括號來標記函數體的開始位置。對於組成函數體的代碼,即使只有一行,也必須包含在左大括號和右大括號中。請注意函數體對大括號的使用要比循環中的使用更嚴格。 |
1009 | 需要“}” | 沒有用右大括號來標記函數體、循環、代碼塊或者對象初始化軟件的結束位置。這種錯誤的一個示例是:for 循環只有標記循環體起點的左括號。 |
1011 | 需要“=” | 試圖創建一個供條件編譯語句使用的變量,但在變量和要賦給該變量的值之間缺少一個等號。 |
1033 | 需要“catch” | 使用了處理異常的try 語句塊,但沒有些相應的 catch 語句。異常處理機制需要將那些可能失敗的代碼,連同當異常發生後不會執行的代碼一起,包在一個 try 語句塊中。發生異常時通過使用 throw 語句將異常從 try 語句塊中拋出,並被 try 語句塊外的一個或多個catch 語句抓獲。 |
1031 | 需要常數 | 試圖在條件編譯測試語句中使用一個(非條件編譯)變量。條件編譯測試語句的值必須爲一個常數。 |
1023 | 需要十六進制數 | 創建了一個不正確的 Unicode 轉義序列。Unicode 轉義序列以 \u 開頭,後跟整整四位十六進制數(不多,也不少)。Unicode 十六進制數不僅包含數字 0-9,大寫字母 A-F,還有小寫字母 a-f。下面的示例演示了正確形成的 Unicode 轉義序列。 |
1010 | 需要標識符 | 在需要標識符的上下文中,使用了不是標識符的內容。標識符可以是: 變量, 屬性, 數組, 函數名稱。 |
1028 | 需要標識符、字符串或者數字 | 使用了不正確的文字語法來聲明對象文字。對象文字的屬性必須是標識符、字符串或一個數。對象文字(也稱爲“對象初始化程序”)由用逗號分割的屬性:值對組成,所有值對都用括號括起來。 |
1024 | 需要“while” | 在 do … while 循環中沒有包含 while 條件。一條 do 語句必須有相應的 while 測試。 |
1014 | 非法字符 | JavaScript 編譯器認爲由字符(或多個字符)組成的標識符非法。合法字符應遵守下述規則: 第一個字符必須爲ASCII字母(大寫或小寫)或下劃線 (_)。 後續字符可以是ASCII字母、數字和下劃線。 標識符名稱不能爲保留字。 |
1026 | 未找到標籤 | 所引用的標籤不存在。標籤可用來標記代碼塊,不過必須在特定範圍內,而且必須唯一。 |
1025 | 標籤定義重複 | 創建新標籤時給定的名稱與現有標籤名稱重複。標籤可以用來標記語句塊,但在一個指定範圍內必須是唯一的。 |
1018 | 函數外有 'return' 語句 | 在代碼的全部範圍內使用。return 語句只能出現在函數體內。使用 () 操作符調用函數是一個表達式。所有的表達式都有值;return 語句用來指定由函數返回的值。通常的形式是:return [ expression ];當執行到 return 語句時,首先對該表達式求值並將其返回作爲該函數的值。如果沒有表達式,則返回 undefined 。當 return 語句執行完畢後,該函數的執行就終止了,即使還有函數體中仍有其它語句。這個規則的一個例外是如果該 return 語句發生在某個 try 塊內,且有相應的 finally 塊,那麼 在該函數返回前將執行 finally 塊中的代碼。如果函數是由於到達函數體結束處而不是因爲執行return語句返回,則返回值爲 undefined(表示該函數的結果無法作爲大表達式的部分。 |
1002 | 語法錯誤 | 所創建的語句違反了一條或多條 JavaScript 的語法規則。 |
1035 | “Throw”的後面必須跟有一個表達式,且在同一源代碼行上 | 使用了 throw 關鍵字,但在同一行內沒有緊接一個表達式。一個 throw 語句由兩部分組成:throw 關鍵字,後面緊跟待拋出的表達式。 |
1016 | 註釋未結束 | 多行註釋塊沒有結束。多行註釋塊以一個 "/*" 組合開始,並以"*/" 組合結束。 |
1015 | 字符串常數未結束 | 字符串常數後面沒有用結束的單引號或雙引號。字符串常數必須用單引號或雙引號引起來。 注意: 可以使用單引號或雙引號作爲匹配符,雙引號可以包含在單引號所引起來的字符串中,單引號也可以包含在雙引號引起來的字符串中。 |