2015-02-10 55 views

回答

-1

使用第二个选项。在第一种情况下,您将收到警告消息:

Warning: Error code: 1008: variable 'arr3' has no type declaration. 
+0

这不是他的问题,他问两个选项之间的区别。 – DodgerThud 2015-02-10 14:29:50

0

第一个变量是无类型的。如果声明一个变量,但不声明其数据类型,则将应用默认数据类型*****,这实际上意味着该变量是无类型的。如果你还没有使用一个值初始化一个无类型的变量,那么它的默认值是未定义的。

第二个输入为Vector ..用Vector声明的变量。数据类型只能存储使用相同基本类型int构造的Vector实例。例如,通过调用新的Vector.()构造的Vector不能分配给用Vector声明的变量。数据类型。

1

这是声明变量类型和不是的区别。虽然在AS3中声明一个类型是可选的,但最好的做法是始终声明一个类型。

对你的代码的影响是,如果你声明一个类型,它只会在该类型的值被赋值给该变量时才会被正确编译和运行,并且它将被严格视为该类型的对象,没有其他的。这被称为“类型安全”。如果你没有声明一个类型,你可以给这个变量赋值任何东西,并将代码编写为任何类型的对象 - 这听起来很方便,但最终会让代码变得更加混乱,脆弱和容易出错。

另外请注意,不是声明一个类型是等于宣告它作为一个“通配符”类型,像这样:var arr3:*

下面是类型化VS代码类型变量的例子:

var untyped:*; 
var string:String; 
var number:Number; 
var integers:Vector.<int>; 

untyped = 1; // ok 
untyped = "hello"; // ok 
untyped = new Vector.<int>(); // ok 

string = 1; // compile error 
string = "hello"; // ok 
string = new Vector.<int>(); // compile error 

number = 1; // ok 
number = "hello"; // compile error 
number = new Vector.<int>(); // compile error 

integers = 1; // compile error 
integers = "hello"; // compile error 
integers = new Vector.<int>(); // ok 

if (untyped == 1) // ok 
if (untyped == "hello") // ok 
if (untyped.fixed) // compiles ok, but throws runtime error if "fixed" not defined on non-dynamic object 

if (string == 1) // compile error, invalid comparison 
if (string == "hello") // ok 
if (string.fixed) // compile error, "fixed" not a property of String 

if (number == 1) // ok 
if (number == "hello") // compile error, invalid comparison 
if (number.fixed) // compile error, "fixed" not a property of Number 

if (integers == 1) // compile error, invalid comparison 
if (integers == "hello") // compile error, invalid comparison 
if (integers.fixed) // ok 

这些编译错误有助于向您(或其他开发人员)在变得难以追查SWF中的问题之前向您显示错误。例如,考虑这种无类型代码:

var value = "hello"; 
if (value.x < 10) { } 

该代码没有太大意义,但它会编译。然后,当您尝试执行if语句并在String“hello”上找不到x时,您将遇到运行时错误。在现实生活中,你可能需要做大量的狩猎才能弄清楚什么是错误的,特别是如果这两条线彼此靠得不近。不过,如果程序员已经指定的变量类型,它将使代码更安全类型:

var value:Point; 
if (value.x < 10) { } 

在这种情况下,如果你想分配value = "hello"代码将无法编译。编译器也会验证xPoint类型的属性。如果不是,那么你也会在那里发现一个编译错误。它甚至知道x可以使用<进行比较,因为它是Number。这对于尽早发现错误非常有帮助。

除了使程序员对代码更清楚之外,它还使创作工具更加清晰 - 大多数创作工具会为类型化对象提供更好的代码完成建议,因为它确切知道哪些属性和方法该类型的对象具有。

由于这些原因和其他原因,您很少会发现不使用严格类型声明的AS3代码示例,并且大多数程序员(包括我)会建议您始终使用它们。

-1

大家的好答案。但真正的答案会更进一步。在情况1中变量没有类型,而在情况2中变量具有类型。不同的是,在第二种情况下,编译器能够为您提供信息,以防万一代码中出现错误。在第一种情况下,如果代码中出现错误,编译器可能会提供一些信息甚至根本没有信息。如果使用非类型化变量(情况1),则如果代码中存在任何错误,则开发人员将自行开发。你将成为寻找他们并尝试修复他们的人。在第二种情况下,编译器会告诉你哪里存在错误,并且很可能是为什么存在错误。

+1

我想你错过了我的答案。 ;) – Aaron 2015-02-10 17:37:20