as 3メモ6-データ型(タイプチェック)
1、as 3はタイプチェックを行い、データ型が一致しているかどうかを確認します.
2、データ型が一致しない場合は変数のタイプを宣言しますが、このタイプではない値を割り当てます. 宣言されたパラメータタイプとパラメータ値は異なります: 3、いつ検査しますか.コンパイル時にチェックするか、実行時にチェックすることができます.コンパイルは2つのモード,厳格モード,標準モードに分けられる.厳格モードはコンパイル時にタイプチェックを実行し、標準モードは実行しません.ただし、両方のモードは実行時にチェックされます.
4、厳格モードでタイプチェックを終了します.厳格モードでは、タイプチェックを回避し、タイプ変数なしを使用することもできます.
例1:
例2:
例1と例2では,コンパイル時にエラーは報告されない.なぜなら、例1では、関数test 1のパラメータはタイプがないと宣言され、任意のタイプのパラメータを受信することができるからである.例2では,関数test 2のパラメータタイプは文字列であるが,我々が伝達するパラメータはタイプなしである.
ただし、例2では、実行時に送信されるパラメータが数値型であり、宣言されたパラメータタイプと一致しないことが判明するため、実行時エラーが発生します.
5、標準モードでコンパイルし、実際にはタイプチェックを実行時に遅らせることで、クラスの「アップロード」機能を実現できる.
以上のようにClassAを定義し、ClassBから継承します.ClassAは自分の属性nameを定義します.次の呼び出しでは、ClassBタイプの変数someを宣言しますが、ClassAのインスタンスを割り当てました.これは合法的で、「アップロード」と呼ばれています.しかし、次にsomeのプロパティnameに値を割り当てますが、プロパティnameはClassBではなく、厳格なモードでコンパイルエラーが発生する場合がありますが、ランタイムエラーは発生しません.
6、is演算子.変数または式が所定のデータ型のメンバーであるかどうかをテストし、trueまたはfalseを返します.
仮定:存在クラスA クラスA継承クラスB クラスA実装インタフェースIM クラスB継承クラスC クラスC実装インタフェースIN
あります.
上の各式はtrueです.
instanceofとは異なり、isをinstanceに変更します.
後の2つはfalseで、両者の違いがわかります:isはインタフェースをチェックすることができて、instanceはできませんので、私たちはisを使うべきです
7、as演算子.機能はisと同様に、唯一の違いは戻り値であり、isがtrueを返すと、asはテストのオブジェクトまたは式を返し、isはfalseを返し、asはnullを返す.
本文の住所:http://kino.iteye.com/blog/236381、転載は明記してください、ありがとうございます.
2、データ型が一致しない場合
var num:Number;
num = "str';
function test(p:String):void{}
test(3);
4、厳格モードでタイプチェックを終了します.厳格モードでは、タイプチェックを回避し、タイプ変数なしを使用することもできます.
例1:
function test1(p):void{
trace(p);
}
var a:Number = 10;
var b:String = "Hello";
test1(a);
test1(b);
例2:
function test2(p:String):void{
trace(p);
}
var a:* = 10
test2(a);
例1と例2では,コンパイル時にエラーは報告されない.なぜなら、例1では、関数test 1のパラメータはタイプがないと宣言され、任意のタイプのパラメータを受信することができるからである.例2では,関数test 2のパラメータタイプは文字列であるが,我々が伝達するパラメータはタイプなしである.
ただし、例2では、実行時に送信されるパラメータが数値型であり、宣言されたパラメータタイプと一致しないことが判明するため、実行時エラーが発生します.
5、標準モードでコンパイルし、実際にはタイプチェックを実行時に遅らせることで、クラスの「アップロード」機能を実現できる.
//
class ClassA extends ClassB{
var name:String;
}
//
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
後の2つは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
本文の住所:http://kino.iteye.com/blog/236381、転載は明記してください、ありがとうございます.