严格数据类型指定

动作脚本 2.0 允许在创建变量时显式声明其对象类型;这称作严格数据类型指定。因为数据类型不匹配会触发编译器错误,所以严格数据类型指定有助于避免为现有变量指定错误的数据类型。若要为某个项目指定特定的数据类型,请使用 var 关键字和后冒号语法指定其类型:

//严格指定变量或对象的类型
var x:Number = 7;
var birthday:Date = new Date(); 

// 参数的严格类型指定
function welcome(firstName:String, age:Number){ 
}

// 参数和返回值的严格类型指定
function square(x:Number):Number {
  var squared = x*x;
  return squared;
}

由于在严格指定变量的数据类型时必须使用 var 关键字,因此不能严格指定全局变量的类型(请参见确定变量的范围和声明变量)。

您可以根据内置类(Button、Date、MovieClip 等)以及您创建的类和接口来声明对象的数据类型。例如,如果您在一个名为 Student.as 的文件中定义了 Student 类,则可以指定您创建的对象属于类型 Student:

var student:Student = new Student();

您也可以指定对象属于类型 Function 或 Void。

使用严格类型指定有助于确保您不会因为疏忽而为对象指定错误的值类型。Flash 将在编译时检查类型指定不匹配错误。例如,假设您键入以下代码:

// 在 Student.as 类文件中
class Student {
  var status:Boolean; // Student 对象的属性
}

// 在脚本中
var studentMaryLago:Student = new Student();
studentMaryLago.status = "enrolled";

当 Flash 编译此脚本时,将生成“类型不匹配”错误。

严格数据类型指定的另一个优点是,对于严格指定类型的内置对象,Flash MX 2004 会自动显示代码提示。有关更多信息,请参见严格指定对象类型以触发代码提示

使用动作脚本 1 发布的文件在编译时不遵守严格数据类型指定。因此,对于严格指定了类型的变量,即使赋给它的值类型不正确,也不会生成编译器错误。

var x:String = "abc"
x = 12 ; // 在动作脚本 1 中不会出现任何错误,但在动作脚本 2 中会出现类型不匹配错误

其原因是,为动作脚本 1 发布文件时,Flash 以斜杠语法(而不是严格数据类型指定)解释像 var x:String = "abc" 这样的语句。(动作脚本 2.0 不支持斜杠语法。)这可能会造成将对象分配给类型错误的变量,导致编译器允许非法的方法调用和未定义的属性引用直接通过,而不报告错误。

因此,如果要实现严格数据类型指定,应确保为动作脚本 2.0 发布文件。