JScript 运行时错误是指当 JScript 脚本试图执行一个系统不能运行的动作时导致的错误。当正在运行脚本、计算变量表达式、或者正在动态分配内存时出现 JScript 运行时错误时。
十进制
十六进制
说明
十进制
十六进制
说明
5
800A0005
非法过程调用或参数
5000
800A1388
6
800A0006
溢出
5001
800A1389
7
800A0007
内存不足
5002
800A138A
9
800A0009
下标超界
5003
800A138B
10
800A000A
此数组被固定或临时锁定
5004
800A138C
不能索引对象
11
800A000B
零除错误
5005
800A138D
13
800A000D
类型失配
5006
800A138E
14
800A000E
串空间不足
5007
800A138F
17
800A0011
不能执行所请求的操作
5008
800A1390
28
800A001C
栈空间不足
5009
800A1391
35
800A0023
子过程或函数未找到
5010
800A1392
48
800A0030
装载DLL出错
5011
800A1393
不能执行来自一个自由脚本的代码
51
800A0033
内部出错
5012
800A1394
52
800A0034
坏文件名或数
5013
800A1395
53
800A0035
文件未找到
5014
800A1396
54
800A0036
坏文件模式
5015
800A1397
55
800A0037
文件已经打开
5016
800A1398
57
800A0039
设备I/O错误
5017
800A1399
58
800A003A
文件已经存在
5018
800A139A
61
800A003D
磁盘空间已满
5019
800A139B
62
800A003E
输入超出文件尾
5020
800A139C
67
800A0043
文件太多
5021
800A139D
68
800A0044
设备不可用
5022
800A139E
70
800A0046
权限禁用
5023
800A139F
71
800A0047
磁盘未准备好
5024
800A13A0
74
800A004A
不能用不同的驱动重命名
5025
800A13A1
75
800A004B
路径/文件访问错误
5026
800A13A2
76
800A004C
路径未找到
5027
800A13A3
91
800A005B
对象变量或With块变量未设置
5028
800A13A4
92
800A005C
For循环未初始化
5029
800A13A5
94
800A005E
Null使用无效
5030
800A13A6
322
800A0042
不能建立所需的临时文件
424
800A01A8
需要对象
429
800A01A9
Automation服务器不能建立对象
430
800A01AE
类不支持Automation
432
800A01B0
在Automation操作中找不到文件名或类名
438
800A01B6
对象不支持这个属性或方法
440
800A01B8
Automation错误
445
800S01BD
对象不支持这个动作
446
800A01BE
对象不支持指定的参数
447
800A01BF
对象不支持当前区域设置
448
800A01C0
指定的参数未找到
449
800A01C1
参数不可选
450
800A01C2
错误的参数数目或非法属性分配
451
800A01C3
对象不是一个集合
453
800A01C5
指定的dll函数未找到
458
800A01CA
变量使用了一个Jscript不支持的Automation类型
462
800A01CE
远程服务器机器不存在或不可用
501
800A01F5
不能分配给变量
502
800A01F6
对象对于脚本不安全
503
800A01F7
对象对于初始化不安全
504
800A01F8
对象对建立不安全
不能给 'this' 赋值
试图给 this 赋值,this 是 JScript 关键字,表示:
当前正在执行某个方法的对象,
如果没有当前方法(或该方法不属于任何其它对象),则是指全局对象。
所谓方法就是由对象调用的 JScript 函数。在一个方法内, this 关键字代表调用该方法的对象的引用(这种情况下,就是指使用 new 操作符调用类构造函数所创建的对象)。
在一个方法内可以使用 this 来引用当前对象,但不能对其赋予新的值。
要改正此错误
不要试图对 this 赋值。要访问某个实例化对象的属性或方法,请使用点操作符(例如 circle.radius)。
注意 不能将用户创建的变量命名为 this;这是一个 JScript 保留字。
需要 Number 类型
试图对一个不是Number 类型的对象调用 Number.prototype.toString 或 Number.prototype.valueOf 方法。这种调用类型的对象必须是Number 类型。
要改正此错误
只调用Number 的Number.prototype.toString or Number.prototype.valueOf 方法。
需要 Function 对象
试图对一个不是 Function 对象调用 Function prototype 方法,或者在函数调用上下文中使用了对象。例如,下面的代码将产生该错误,因为 foo 不是一个函数。 var foo = new Object(); // 创建一个称为 "foo" 的新对象。 var x = foo(); // 试图将 foo 作为一个函数加以调用。
要改正此错误
只对 Function 对象调用 Function prototype 方法。
确保只使用函数调用操作符() 来调用函数。
不能给函数返回值赋
试图将一个值赋给函数结果。可以将函数结果赋给某个变量,但其本身不能用作变量。如果希望将一个新值赋给该函数本身,则不要圆括号(函数调用操作符)。下面的示例演示了产生这一错误的情形。 myFunction() = 42; // 试图强将 42 赋给该函数调用的结果。
要改正此错误
不要使用函数调用的值作为赋值对象。可以将函数调用的结果赋给某个变量。 myVar = myFunction(42);
或者,可以将函数本身(不是其返回数值)赋给一个变量。 myFunction = new Function("return 42;");
需要 String
试图对String对象类型之外的其他类型对象调用String.prototype.toString 或 String.prototype.valueOf 方法。这种调用的类型必须是 String 类型。
要改正此错误
在 String 类型对象中只能调用 String.prototype.toString 或 String.prototype.valueOf 方法
需要 Date 对象
试图对一个不是Date 类型的对象调用 Date.prototype.toString 或 Date.prototype.valueOf 方法。这种调用类型的对象必须是 Date 类型。例如: var o = new Object; o.f = Date.prototype.toString; o.f();
要改正此错误
只能对Date 类型的对象调用 Date.prototype.toString 或者 Date.prototype.valueOf 方法。
需要 Object 类型
试图对一个不是Object 类型的对象调用 Object.prototype.toString 或Object.prototype.valueOf 方法。这种调用类型的对象必须是 Object 类型。
要改正此错误
只调用Object 的 Object.prototype.toString 或 Object.prototype.valueOf 方法。
非法赋值
试图对一个只读的标识符赋值。不能对只读的标识符赋值。例如,主机定义对象和外部 COM 对象。
要改正此错误
不要赋值给只读标识符。
未定义标识符
JScript 编译器不认识试图使用的标识符。当出现下述情况时,返回未定义值:
不存在的变量
变量已声明,但从未对其赋值
对象属性不存在。
要改正此错误
用 var 语句声明一个变量(如 var x)。
需要 Boolean
试图用一个不是 Boolean 类型的对象来调用 Boolean.prototype.toString 或者 Boolean.prototype.valueOf 方法。这种调用类型的对象必须是 Boolean 类型。例如: var o = new Object; o.f = Boolean.prototype.toString; o.f();
要改正此错误
只使用 Boolean 类型的对象调用 Boolean.prototype.toString 或 Boolean.prototype.valueOf 方法。
需要对象的成员
试图对某个对象的数据成员执行某个操作,但该成员不存在。
要改正此错误
请确保所输入的数据成员名字是正确的。
需要 VBArray
所提供的对象不是所需要的 Visual Basic 中的 safeArray。 new VBArray(safeArray);
VBArrays 是只读的,且不能直接被创建。safeArray 参数为一个 VBArray 值,并且在被传递给 VBArray构造函数之前必须获得一个 VBArray 值。这个值只能通过检索现有的 ActiveX 或其他对象得到。
要改正此错误
请确保只将 VBArray 对象传递给 VBArray 构造函数。
需要 JScript 对象型
试图将一个非-JScript 对象传给需要 JScript对象的内置函数。各种内置函数都需要在 JScript 中定义的对象(与主机定义的对象和控件之类的外部组件相对)。
要改正此错误
请确保正在作为参数传递的对象具有正确的类型。
需要 Enumerator 对象
试图对一个非 Enumerator 类型的对象调用 Enumerator.prototype.atEnd、 Enumerator.prototype.item、 Enumerator.prototype.moveFirst 或者 Enumerator.prototype.moveNext 方法。这种调用类型的对象必须是 Enumerator 类型。下面是违反这个规则的代码示例: var o = new Object; o.f = Enumerator.prototype.atEnd; o.f();
要改正此错误
只能对Enumerator 类型的对象调用其 Enumerator.prototype.atEnd、Enumerator.prototype.item、Enumerator.prototype.moveFirst 或者 Enumerator.prototype.moveNext 方法。要查找某个对象是否为 Enumerator 对象,请使用: if(x instanceof Enumerator)
需要正则表达式对象
试图对RegExp类型对象之外的其他对象调用 RegExp.prototype.toString 或 RegExp.prototype.valueOf方法。这种调用的类型必须是 RegExp 对象。
要改正此错误
在 RegExp 对象类型 中,只能调用RegExp.prototype.toString 或 RegExp.prototype.valueOf 方法
正则表达式语法错误
查找字符串的结构违反了一条或多条关于 JScript 正则表达式的语法规则。
要改正此错误
确保正则表达式查找字符串的结构与 JScript 正则字符串的语法一致。
未预期的限定符
在组织正则表达式的查找模式时,创建了一个带有非法循环因子的模式元素。例如,模式 /^+/
是非法的,因为元素 ^(输入开始)没有循环因子。下表列出了没有循环因子的元素:
元素
描述
^
输入开始
$
输入结束
\b
词的边界
\B
非单词的边界
*
零个或多个循环
+
零个或多个循环
?
零个或多个循环
{n}
n 循环
{n,}
n 或多个循环
{n,m}
从 n 到 m 循环,包括 m
要改正此错误
请确保查找模式元素仅包括合法的循环因子。
正则表达式中缺少 ']'
试图创建一个用于正则表达式匹配的字符类,但是没有右中括号。单个的文字字符组合可以用括号括起来表示一个字符类。一个字符类可以匹配其中包含的任一字符。例如,/[abc]/ 可以匹配字母 “a”, “b”, 或 “c” 的任何一个。
要改正此错误
给正则表达式加上右中括号。
注意 如果想匹配单中括号,可以使用反斜杠将其转义 - \( - 这样就不会被JScript 解释为特殊字符。)
正则表达式中缺少 ')'
试图创建一个正则表达式捕获、断言和组合,但不包括结束圆括号。正则表达式中的圆括号有多个用途。首先,它们主要用来抓捕子表达式,指定断言、或将模式组合,从而通过 *、+、? 等等使这些项被看作一个单一的单位。
要改正此错误
加上最右边的结束圆括号。
注意 如果想匹配单括号,可以使用反斜杠将其转义 - \( - 这样就不会被 JScript 解释为特殊字符。)
字符集范围无效
试图创建的正则表达式含有无效的字符集范围。字符集的范围必须只能是单个字符的变化,诸如a-z 或 0-9;不能在字符集中包括诸如 \w 的字符类。字符集范围的第一个字符也必须位于范围中第二个字符的前面。例如: var good = /[a-z]/; // 有效的字符范围 - a 在 z 之前。 var notGood = /[z-a]/; // 无效的字符范围 - z 不在 a 之前。
要改正此错误
只使用单字符来组合正则表达式字符集,并确保他们具有正确的顺序。
异常抛出,但无法抓住
在代码中包括了一条 throw 语句,但没有将其包含在某个 try 语句块内,或者没有相关的 catch 语句块来捕获错误。异常是在 try 语句块中使用 throw 语句被抛出,并且应该由 try 语句块外的 catch 语句抓住。
要改正此错误
用 try 语句块将可能产生异常的代码封住,并确保外面有一个相应的 catch 语句块。
确认 catch 语句中为正确的异常格式。
如果异常被再次抛出,确认存在相应的 catch 语句。
函数没有合法的 prototype 对象
试图使用 instanceof 来确定一个对象是否是从某个特定函数类派生而来,但重新定义的该对象的prototype 属性要么是空的,要么是外部对象类型(都不是有效的JScript 对象)。外部对象可能来自主机对象模型(例如, Internet Explorer 的产品和 window 产品,或一个外部的COM 对象)。
要改正此错误
确保函数的 prototype 属性引用了合法的 JScript。
待编码的 URI 包含有非法字符
试图将字符串编码得到 URI(通用资源标识符),但是包含非法字符。尽管字符串中的绝大多数字符都是合法的,可以转换为 URI,但有些 Unicode 字符序列是非法的。
要改正此错误
请确保待编码的字符串只包含合法的 Unicode 序列。
一个完整的 URI 是由一系列部件和分隔符组成的。其通用格式为:
<Scheme>:<first>/<second>;<third>?<fourth>
尖括号内的名称代表部件,而 “:”, “/”, “;” 和 “?” 都是作为分隔符的保留字。
待解码 URI 的编码非法
试图对一个不正确 URI(通用资源标识符)进行解码。URI 具有特殊的语法;绝大多数非字母数字字符在用于 URI 必须加以编码。可以使用 encodeURI 和 encodeURIComponent 方法从一个标准的 JScript 字符串创建一个 URI。
一个完整的 URI 是由一系列部件和分隔符组成的。其通用格式为:
<Scheme>:<first>/<second>;<third>?<fourth>
尖括号内的名称代表部件,而 “:”, “/”, “;” 和 “?” 都是作为分隔符的保留字。
要改正此错误
请确保您只需要对合法的 URI 进行解码。你不能对标准的 JScript 字符串解码,因为它们可能含有非法字符。
小数部分的位数越界
试图将一个非法参数传递给Number.prototype.toExponential()。函数toExponential() 的参数为 0 到 20(含 20)之间。
要改正此错误
请确保的 toExponential() 不是太大也不是太小。
精度越界
试图将一个非法参数传递给 Number.prototype.toPrecision。 给 toPrecision 的参数必须为 1 到 21(含21)之间。
要改正此错误
请确保 toPrecision 不是太大也不是太小。
需要 Array 或 arguments 对象
没有将数组作为参数。这个错误只在 Function.prototype.apply方法中发生。如果使用这个函数,则该函数的第二个参数要么是 Array 对象,要么是 Arguments 对象。
要改正此错误
指定一个 Array 或 Arguments 对象作为第二个参数。
数组长度必须是一个有限正整数
在调用 Array 构造函数时使用的参数不是自然数(所谓自然数就是零加上正整数集合)。
要改正此错误
在创建一个新的 Array 对象时只能使用正整数。如果要创建一个只有一个元素且不是整数的数组,请执行下面两步操作。首先,创建一个只有一个元素的数组,然后将这个值赋给第一个元素 (array[0])。下面的示例将产生这个错误。
var piArray = new Array(3.14159);
下面的示例演示了指定一个只有单个数值元素的数组的正确方法。
var piArray = new Array(1); piArray [0] = 3.14159;
数组大小没有上界限制,但不能超过整数的最大值(大约为40亿)。
必须赋给数组长度一个有限正整数
在对现有 Array 对象设置其 length 属性时,所指定的数组长度不是正整数,也不是零。如果给某个 Array 对象的 length 属性所赋的值时为负数或不是数值 (NaN) 时,就会产生这个错误。请注意 JScript 会自动将小数数值转换为整数。
要改正此错误
将一个正整数赋给 length 属性。数组大小没有上界限制,但不能超过整数的最大值(大约为40亿)。下面的示例演示了给 Array 对象的 length 属性赋值的正确方法。
var my_array = new Array(); my_array.length = 99;