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 ...