编译器警告消息识别有效且成功编译的代码,但此代码可能不是作者想要的代码。若要检测这些可能存在的问题,请在警告模式下编译 ActionScript 项目。
其中一些警告(例如,“缺少类型声明。”)属于编码风格的选择问题,您既可以遵循也可以忽略。其它警告(例如,“赋值不能为 null。”)指出语句虽然有效,但无法实现用户所期望的行为。第三类警告涵盖将 ActionScript 2.0 代码移植到 ActionScript 3.0 时可能遇到的问题。
| 代码 | 消息 | 说明 |
| 1009 | _“_”没有类型声明。
|
不声明数据类型是一种个人编码风格偏好。函数的返回类型、参数或变量没有类型声明。但如果使用类型声明,编译器就可以编写出更为有效的代码并且在编译时检测到更多的错误。如果要在无法使用类型声明时得到提示,可以启用此警告。
|
| 1013 | 类型为 _ 的变量不能为 undefined。比较之前,undefined 值将是强制为 _ 的类型。
|
只有类型为 * 的变量才能为 undefined。未初始化的变量的默认值是 null (而不是 undefined ),但有几种例外情况。例外包括:Boolean 变量,其默认值为 false 。Number 变量的默认值为 NaN ;int 或 uint 变量的默认值为 0 。
|
| 1031 | 迁移问题:新 _ 的结果将是 _ 的返回值,而不是该函数的新实例。
|
这是一个代码迁移警告。在 ActionScript 3.0 和 ActionScript 2.0 中,检测到的代码具有不同的行为,如下面的示例所示:
function f(){
this.b = 22;
this.a = new Array(2);Â?
this.a[0] = 33;
this.a[1] = 44;
return a;
}
// 在 ActionScript 2.0 中返回 f 的一个新实例,在 ActionScript 3.0 中返回一个由两个元素组成的新数组
var d = new f();Â? // 此处将出现警告
trace(d.a); // 在 ActionScript 3.0 中未定义,在 ActionScript 2.0 中为 [33,44]
|
| 1035 | 使用了没有参数的 Boolean()。
|
这是一个代码迁移警告。Boolean() 函数在 ActionScript 3.0 中返回 false ,但在 ActionScript 2.0 中返回 undefined 。
|
| 1039 | 迁移问题:使用空字符串参数调用 Number('') 函数时,它将在 ActionScript 3.0 中返回 0,而在 ActionScript 2.0 中返回 NaN。
|
这是一个代码迁移警告。使用 String 参数调用的 Number() 方法会跳过该字符串中的所有空白,并在检测不到数字时返回默认值 0。在 ActionScript 2.0 中,该字符串中的任何空白都会导致结果为 NaN。
|
| 1045 | 迁移问题:Null 元素和 undefined 元素的 Array.toString() 处理已更改。
|
这是一个代码迁移警告。在 ActionScript 2.0 中,null 数组元素转换为 null ,而 undefined 元素转换为 undefined 。在 ActionScript 3.0 中,null 和 undefined 元素都转换为空字符串 ''。如果您的代码分析了 Array 中的 toString() 输出,您可能需要针对这两种情况的区别对代码进行调整。
|
| 1059 | 迁移问题:不再支持属性 _。_。
|
这是一个代码迁移警告。您正在尝试使用的属性未存在于 ActionScript 3.0 中。
|
| 1061 | 迁移问题:不再支持方法 _。_。
|
这是一个代码迁移警告。ActionScript 3.0 中不存在您正在尝试使用的方法。
|
| 1066 | 不再支持 __resolve。 | |
| 1067 | 迁移问题:不再支持 __resolve。为了获得类似功能,请使用新的 Proxy 类。
|
这是一个代码迁移警告。有关替换 __resolve 的详细信息,请参阅本语言参考中的 Proxy。
|
| 1071 | 迁移问题:不再支持 _level。有关详细信息,请参阅 flash.display 包。
|
这是一个代码迁移警告。您正在尝试使用的属性未存在于 ActionScript 3.0 中。
|
| 1073 | 迁移问题:_ 不是动态类。不能以动态方式向实例中添加成员。
|
这是一个代码迁移警告。在 ActionScript 2.0 中,许多类(如 Number)是动态的,这意味着可以在运行时向这些类的实例中添加新属性。如果代码尝试向非动态类的实例中添加属性,则会产生此警告。
|
| 1083 | 迁移问题:由于 this 关键字范围的变化,方法 _ 在 ActionScript 3.0 中将有不同的行为。有关其它信息,请参阅有关警告 1083 的条目。
|
这是一个代码迁移警告。将对象的方法作为值(通常是回调函数)使用时,将会生成此警告。在 ActionScript 2.0 中,在调用函数的上下文中执行函数;在 ActionScript 3.0 中,总是在定义函数的上下文中执行函数。因此,变量和方法的名称将被解析为回调函数所属的类,而不是与调用该函数的上下文有关的类,如下面的示例所示:
class a
{
var x;
function a() { x = 1; }
function b() { trace(x); }
}
var A:a = new a();
var f:Function = a.b; // 此处将触发警告
var x = 22;
f(); // 在 ActionScript 3.0 中输出 1,在 ActionScript 2.0 中输出 22
|
| 1085 | _ 的范围将是默认命名空间 _ 的内部。它在此包之外不可见。
|
不声明命名空间是一种个人编码风格偏好。如果要在忘记声明定义的命名空间或访问说明符时得到提示,可以启用此警告。如果没有命名空间或访问说明符,该定义对于此文件之外的代码是不可见的。要使该定义对于此文件之外的代码是可见的,请使用访问说明符 public 或命名空间声明对该定义进行声明。要使该定义的作用范围仅限于此文件并避免生成此警告,请将该定义声明为 private 。
|
| 1087 | 迁移问题:ActionScript 3.0 以随机顺序在一条“for x in target”语句之内迭代对象的属性。
|
这是一个代码迁移警告。在 ActionScript 2.0 中,对象属性的处理顺序始终不变。在 ActionScript 3.0 中,该顺序是随机的,可因计算机而异。如果出现意外的排序行为,请检查此循环,以确定此行为更改是否会影响代码。
|
| 1089 | 错误代码:_。
|
这是由于源文件遭到破坏或编译器代码中出现错误造成的。请与 Adobe, Inc. 联系,以便将错误登记备案。
|
| 1091 | 迁移问题:_
|
这是一个代码迁移警告。在 ActionScript 2.0 中,如果声明方法时使用的是特殊名称(如 onMouseDown ),那么,在出现特定事件时,Flash 可能会调用该方法。在 ActionScript 3.0 中,必须通过方法来调用 addEventListener() ,从而对这一函数进行注册以接收该事件。有关详细信息,请参阅本语言参考中的 addEventListener 。
|
| 1093 | 在应为 uint(非负)值的地方使用负值。
|
将负值赋给 uint 数据类型的变量将产生极大的正值。 var x:uint = -1; trace(x); // 4294967295 .
|
| 1097 | 与 null 的比较不合逻辑。类型为 _ 的变量不能为 null。
|
Boolean、int、uint 和 Number 类型的实例不能为 null 。与 Boolean 数据类型比较之前,比较运算符类型将 null 转换成 false ;与 Number、int 或 uint 数据类型比较之前,将其转换成 0。
|
| 1099 | 与 NaN 的比较不合逻辑。此语句始终计算为 false。
|
NaN 具有独特的数学属性,任何涉及该属性的比较运算都计算为 false 。改用全局 isNaN() 函数检测 NaN 值,如下面的示例所示:
trace(NaN == NaN); // false!
trace(NaN != NaN); // 还是 false!
trace(isNaN(NaN)); // true
|
| 1101 | 条件语句之内的赋值语句。您指的是 == 而不是 = 吗?
|
= 赋值语句的结果是该 = 语句右边的值。可以将赋值语句用作条件测试,但不建议这样做。通常,出现 = 是由于计划执行 == 相等测试时的键入错误造成的,如下面的示例所示:
var x:Boolean = false;
var y:Boolean = true;
// 很难确定下面一行是有意将 x 的值设置为 y 的值,还是属于键入错误
if (x = y) { trace("x is assigned y's value of true, making the conditional test evaluate as true."); }
|
| 1103 | 使用了 null 值,但是应为 _ 值。
|
不能将 null 作为值赋给 Boolean、Number、int 和 uint 变量。赋给 Boolean 数据类型时,null 值会隐式转换为 false ,而赋给 int、uint 或 Number 数据类型时会转换为 0 。
|
| 1105 | 尚未指定类 _ 的构造函数。
|
不指定构造函数是一种个人编码风格偏好。如果需要始终为类声明构造函数,可以启用此警告。此警告旨在帮助您发现类名称更改但其构造函数名称没有更改的情况。不启用此警告时此类情况不会被标记为问题,前一个构造函数看上去是一个标准函数。
|
| 1111 | 未初始化该常量。 | |
| 1113 | Array(x) 与新 Array(x) 具有相同的行为。若要将某个值转换成 Array 类型,请将表达式 x 用作 Array 而非 Array(x)。 | |
| 1115 | 输入此构造函数之前,将会执行 super() 语句。如果要显式控制 super() 语句的执行时间,请在该构造函数中添加对该语句的调用。
|
在构造函数中添加对 super() 的调用是一种个人编码风格偏好。如果需要始终明确 super() 的调用时间,可以启用此警告。启用此警告对于打算在某些本地初始化代码之后调用 super() 但忘记对其进行添加的情况非常有用。
|
| 3552 | 与使用 TextField.appendText() 方法相比,使用 += 将文本追加到 TextField 的效率低很多倍。
|
有关此重要文本优化操作的详细信息,请参阅本语言参考中有关 TextField 类的 appendText() 方法的内容。
|
| 3554 | 使用了 Function 值,但是应为类型 _。此函数参考之后可能缺少括号 ()。
|
在 ActionScript 中,可以将函数本身用作值。此处所述的代码使用的是 Function 类型的值,但需要的是 Function、Object 或 * 之外的类型。通常,这表示出现函数名称之后遗漏括号 () 的键入错误。
|
| 3556 | 不推荐使用 instanceof 运算符,请改用 is 运算符。 | |
| 3574 | 迁移错误:ActionScript 2.0 XML 类已重命名为 XMLDocument。
|
这是一个代码迁移警告。在 ActionScript 3.0 和 ActionScript 2.0 中,XML 是不同的类。ActionScript 3.0 中的 XMLDocument 类与 ActionScript 2.0 中的 XML 类等效。ActionScript 3.0 XML 类通过更为简便和更加强大的 API 提供了增强的功能。有关其它详细信息,请参阅《ActionScript 语言参考》中的 XML。
|
| 3576 | Date(x) 与新的 Date().toString() 具有相同的行为。若要将某个值转换为 Date 类型,请使用“x as Date”代替 Date(x)。 | |
| 3582 | 如果以相同名称将包导入为当前类,将在此作用域中隐藏该类的标识符。 | |
| 3584 | 指定了多个名称为“_”的参数。对该参数的引用将始终解析为最后一个参数。 | |
| 3590 | 使用了非 Boolean 值,但是应为 Boolean 值。 | |
| 3591 | 使用了 _,但是应为 Boolean 值。表达式将强制为 Boolean 类型。 | |
| 3593 | _ 不是动态类 _ 的可识别属性。
|
在严谨的编译模式下,不会在动态类的实例中检查未定义属性。类型 Date、RegExp 和 Error 是动态的,以便向后与 ECMAScript 兼容。此警告在这些类的实例中找到了对未定义属性的使用。一个常见的问题是尝试获取或设置的 Date 值的 year 属性不存在。正确的属性名称是 fullYear 。
|
| 3595 | _ 不是动态类 _ 的可识别方法。
|
在严谨的编译模式下,不会在动态类的实例中检查未定义的方法。类型 Date、RegExp 和 Error 是动态的,以便向后与 ECMAScript 兼容。此警告在这些类的实例中找到了对未定义方法的使用。
|
| 3597 | 重复的变量定义。
|
编译器检测到变量的重复定义。这会导致意外的结果。ActionScript 不支持变量的块级别作用范围。在函数体内定义的所有变量属于同一范围,即便这些变量在 if 语句、while 语句和 for 语句中定义,也是如此。例如,下面的代码会重新声明变量 x 两次:
function test() {
var x:Number = 10;
if (true) {
for (var x=0; x < 5; x++) // 此处将出现警告,这是 x 的第二次定义
trace(x);
}
trace(x); // 是 5,而不是 10。由上面的 for 循环设置的最后一个值是 x 的当前值
}
|
| 3598 | 定义的名称和已导入的包的名称相同。如果不加限定地引用该名称,则该名称将被解析为包而不是定义。 | |
| 3599 | 定义的名称和已导入的包的名称相同。如果不加限定地引用该名称,则该名称将被解析为包而不是定义。
|
如果某定义的名称与范围内的包相同,则对该名称的任何非限定引用都将解析为该包,而不是解析为该定义。这会在尝试引用该变量时导致意外的错误。为此,必须限定对该定义的所有引用,以便将其解析为该定义,而不是解析为该包。
|
| 3600 | 可能试图删除固定属性。 | |
| 3601 | 不能删除声明属性 _。若要释放相关内存,请将其值设置为 null。
| delete 会从对象中动态删除定义的属性。不能删除类的声明属性,该操作将失败且无任何提示。若要释放此变量的相关内存,请将其值设置为 null。 |