这篇文章主要提供给大家分享学习的是关于JScript运行时错误的简单分析,希望对大家有用。
JScript 运行时错误是指当 JScript 脚本试图执行一个系统不能运行的动作时导致的错误。当正在运行脚本、计算变量表达式、或者正在动态分配内存时出现 JScript 运行时错误时。
十进制 | 十六进制 | 说 明 | 十进制 | 十六进制 | 说 明 |
5 | 800A0005 | 非法过程调用或参数 | 5000 | 800A1388 | 不能给 'this' 赋值 |
6 | 800A0006 | 溢出 | 5001 | 800A1389 | 需要 Number 类型 |
7 | 800A0007 | 内存不足 | 5002 | 800A138A | 需要 Function 对象 |
9 | 800A0009 | 下标超界 | 5003 | 800A138B | 不能给函数返回值赋值 |
10 | 800A000A | 此数组被固定或临时锁定 | 5004 | 800A138C | 不能索引对象 |
11 | 800A000B | 零除错误 | 5005 | 800A138D | 需要 String |
13 | 800A000D | 类型失配 | 5006 | 800A138E | 需要 Date 对象 |
14 | 800A000E | 串空间不足 | 5007 | 800A138F | 需要 Object 类型 |
17 | 800A0011 | 不能执行所请求的操作 | 5008 | 800A1390 | 非法赋值 |
28 | 800A001C | 栈空间不足 | 5009 | 800A1391 | 未定义标识符 |
35 | 800A0023 | 子过程或函数未找到 | 5010 | 800A1392 | 需要 Boolean |
48 | 800A0030 | 装载DLL出错 | 5011 | 800A1393 | 不能执行来自一个自由脚本的代码 |
51 | 800A0033 | 内部出错 | 5012 | 800A1394 | 需要对象的成员 |
52 | 800A0034 | 坏文件名或数 | 5013 | 800A1395 | 需要 VBArray |
53 | 800A0035 | 文件未找到 | 5014 | 800A1396 | 需要 JScript 对象 |
54 | 800A0036 | 坏文件模式 | 5015 | 800A1397 | 需要 Enumerator 对象 |
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 | 函数没有合法的 Prototype (原型) 对象 |
71 | 800A0047 | 磁盘未准备好 | 5024 | 800A13A0 | 待解码的 URI 包含有非法字符 |
74 | 800A004A | 不能用不同的驱动重命名 | 5025 | 800A13A1 | 待解码的 URI 编码非法 |
75 | 800A004B | 路径/文件访问错误 | 5026 | 800A13A2 | 小数部分的位数越界 |
76 | 800A004C | 路径未找到 | 5027 | 800A13A3 | 精度越界 |
91 | 800A005B | 对象变量或With块变量未设置 | 5028 | 800A13A4 | 需要 Array 或 arguments 对象 |
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 是 JScript 关键字,表示:
所谓方法就是由对象调用的 JScript 函数。在一个方法内, this 关键字代表调用该方法的对象的引用(这种情况下,就是指使用 new 操作符调用类构造函数所创建的对象)。
在一个方法内可以使用 this 来引用当前对象,但不能对其赋予新的值。
要改正此错误
注意 不能将用户创建的变量命名为 this;这是一个 JScript 保留字。
试图对一个不是Number 类型的对象调用 Number.prototype.toString 或 Number.prototype.valueOf 方法。这种调用类型的对象必须是Number 类型。
要改正此错误
只调用Number 的Number.prototype.toString or Number.prototype.valueOf 方法。
试图对一个不是 Function 对象调用 Function prototype 方法,或者在函数调用上下文中使用了对象。例如,下面的代码将产生该错误,因为 foo 不是一个函数。
var foo = new Object(); // 创建一个称为 "foo" 的新对象。 var x = foo(); // 试图将 foo 作为一个函数加以调用。
要改正此错误
试图将一个值赋给函数结果。可以将函数结果赋给某个变量,但其本身不能用作变量。如果希望将一个新值赋给该函数本身,则不要圆括号(函数调用操作符)。下面的示例演示了产生这一错误的情形。
myFunction() = 42; // 试图强将 42 赋给该函数调用的结果。
要改正此错误
myVar = myFunction(42);
myFunction = new Function("return 42;");
试图对String对象类型之外的其他类型对象调用String.prototype.toString 或 String.prototype.valueOf 方法。这种调用的类型必须是 String 类型。
要改正此错误
试图对一个不是Date 类型的对象调用 Date.prototype.toString 或 Date.prototype.valueOf 方法。这种调用类型的对象必须是 Date 类型。例如:
var o = new Object; o.f = Date.prototype.toString; o.f();
要改正此错误
试图对一个不是Object 类型的对象调用 Object.prototype.toString 或Object.prototype.valueOf 方法。这种调用类型的对象必须是 Object 类型。
要改正此错误
只调用Object 的 Object.prototype.toString 或 Object.prototype.valueOf 方法。
试图对一个只读的标识符赋值。不能对只读的标识符赋值。例如,主机定义对象和外部 COM 对象。
要改正此错误
JScript 编译器不认识试图使用的标识符。当出现下述情况时,返回未定义值:
要改正此错误
试图用一个不是 Boolean 类型的对象来调用 Boolean.prototype.toString 或者 Boolean.prototype.valueOf 方法。这种调用类型的对象必须是 Boolean 类型。例如:
var o = new Object; o.f = Boolean.prototype.toString; o.f();
要改正此错误
试图对某个对象的数据成员执行某个操作,但该成员不存在。
要改正此错误
所提供的对象不是所需要的 Visual Basic 中的 safeArray。
new VBArray(safeArray);
VBArrays 是只读的,且不能直接被创建。safeArray 参数为一个 VBArray 值,并且在被传递给 VBArray构造函数之前必须获得一个 VBArray 值。这个值只能通过检索现有的 ActiveX 或其他对象得到。
要改正此错误
试图将一个非-JScript 对象传给需要 JScript对象的内置函数。各种内置函数都需要在 JScript 中定义的对象(与主机定义的对象和控件之类的外部组件相对)。
要改正此错误
试图对一个非 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();
要改正此错误
if(x instanceof Enumerator)
试图对RegExp类型对象之外的其他对象调用 RegExp.prototype.toString 或 RegExp.prototype.valueOf方法。这种调用的类型必须是 RegExp 对象。
要改正此错误
查找字符串的结构违反了一条或多条关于 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 语句抓住。
要改正此错误
试图使用 instanceof 来确定一个对象是否是从某个特定函数类派生而来,但重新定义的该对象的prototype 属性要么是空的,要么是外部对象类型(都不是有效的JScript 对象)。外部对象可能来自主机对象模型(例如, Internet Explorer 的产品和 window 产品,或一个外部的COM 对象)。
要改正此错误
试图将字符串编码得到 URI(通用资源标识符),但是包含非法字符。尽管字符串中的绝大多数字符都是合法的,可以转换为 URI,但有些 Unicode 字符序列是非法的。
要改正此错误
请确保待编码的字符串只包含合法的 Unicode 序列。
一个完整的 URI 是由一系列部件和分隔符组成的。其通用格式为:
<Scheme>:<first>/<second>;<third>?<fourth>
尖括号内的名称代表部件,而 “:”, “/”, “;” 和 “?” 都是作为分隔符的保留字。
试图对一个不正确 URI(通用资源标识符)进行解码。URI 具有特殊的语法;绝大多数非字母数字字符在用于 URI 必须加以编码。可以使用 encodeURI 和 encodeURIComponent 方法从一个标准的 JScript 字符串创建一个 URI。
一个完整的 URI 是由一系列部件和分隔符组成的。其通用格式为:
<Scheme>:<first>/<second>;<third>?<fourth>
尖括号内的名称代表部件,而 “:”, “/”, “;” 和 “?” 都是作为分隔符的保留字。
要改正此错误
试图将一个非法参数传递给Number.prototype.toExponential()。函数toExponential() 的参数为 0 到 20(含 20)之间。
要改正此错误
试图将一个非法参数传递给 Number.prototype.toPrecision。 给 toPrecision 的参数必须为 1 到 21(含21)之间。
要改正此错误
没有将数组作为参数。这个错误只在 Function.prototype.apply方法中发生。如果使用这个函数,则该函数的第二个参数要么是 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;