as3備忘六 資料型別(型別檢查)

2021-08-22 18:39:53 字數 2085 閱讀 2233

1、as3會進行型別檢查,看資料型別是否匹配。

2、資料型別不匹配的幾種情況

3、何時檢查?可以在編譯時檢查,也可以在執行時檢查。編譯分為兩種模式,嚴格模式和標準模式。嚴格模式會在編譯時執行型別檢查,標準模式則不會;但兩種模式都會在執行時檢查。

4、嚴格模式下退出型別檢查。在嚴格模式下也可以避免進行型別檢查,通過使用無型別變數。

例一:

function test1(p):void

var a:number = 10;

var b:string = "hello";

test1(a);

test1(b);

例二:

function test2(p:string):void

var a:* = 10

test2(a);

在例一和例二中,編譯時都不會報錯。因為,例一中,函式test1的引數宣告為無型別的,它就可以接收任何型別的引數;例二中,雖然函式test2的引數型別為字串,但我們傳進去的引數為無型別的。

但是例二中會產生執行時錯誤,因為到執行時就會發現傳進的引數是數字型的,和宣告的引數型別不匹配。

5、使用標準模式編譯,實際上是把型別檢查推遲到執行時進行,這樣可以實現類的「上傳」功能。

//定義

class classa extends classb

//呼叫

var some:classb = new classa();

some.name="some";

如上,我們定義了classa,它繼承自classb。classa定義了自己的乙個屬性name。在接下來的呼叫中,我們宣告了乙個classb型別的變數some,但我們賦給它了乙個classa的例項,這是合法的,這就叫做「上傳」。但接下來,我們給some的屬性name賦值,但屬性name並不屬於classb,如果在嚴格模式下就會產生編譯錯誤,但不會產生執行時錯誤。

6、is運算子。用於測試變數或表示式是否為給定資料型別的成員,返回true或false。

假設:有:

var a:a=new a();

a is a; //true

a is b; //true

a is c; //true

a is im; //true

a is in; //true

//b、c為a的父類,im、in為a實現的介面

上面的每個表示式都為true;

和instanceof的不同,將is換成instance:

var a:a=new a();

a instanceof a; //true

a instanceof b; //true

a instanceof c; //true

a instanceof im; //false

a instanceof in; //false

//b、c為a的父類,im、in為a實現的介面

可以看到後兩項為false,可以看出兩者的不同:is可以檢查介面,instance不能,所以我們應該用is

7、as運算子。功能和is一樣,唯一的區別就是返回值,is返回true時,as返回測試的物件或表示式,is返回false,as返回null.

var a:a=new a();

a as a; //返回物件a

a as b; //返回物件a

a as c; //返回物件a

a as im; //返回物件a

a as in; //返回物件a

a as xx; //返回null

//b、c為a的父類,im、in為a實現的介面

python 資料型別檢查

資料型別檢查 在實際介面自動化測試過程中,我們會發現介面的很多入參引數都標記了 string int float array等等 這就迫使我們對入參得作下檢查工作,不然執行完成後,出錯了,少的還能快速找到問題,多了的話定位問題都要找半天。首先,第一種是這樣的 def function check n...

python 資料型別檢查

資料型別檢查 在實際介面自動化測試過程中,我們會發現介面的很多入參引數都標記了 string int float array等等 這就迫使我們對入參得作下檢查工作,不然執行完成後,出錯了,少的還能快速找到問題,多了的話定位問題都要找半天。首先,第一種是這樣的 def function check n...

資料型別 3

元件api及介面指標中,除了iunknown addref 和 iunknown release 兩個函式外,其它所有的函式,都以 hresult 作為返回值。hresult 值含義 s ok 0x00000000 成功 s false 0x00000001 函式成功執行完成,但返回時出現錯誤 e ...