一、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 | 字符串常数未结束 | 字符串常数后面没有用结束的单引号或双引号。字符串常数必须用单引号或双引号引起来。 注意: 可以使用单引号或双引号作为匹配符,双引号可以包含在单引号所引起来的字符串中,单引号也可以包含在双引号引起来的字符串中。 |