2015-02-10 80 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