ActionScript 3.0のデフォルト値とundefined
デフォルト値
変数宣言した際に初期値を指定しなかった場合のデフォルト値をメモ。Number型のデフォルト値はnullじゃなくてNaNになっています。
型 | デフォルト値 |
---|---|
Boolean | false |
String | null |
int | 0 |
uint | 0 |
Number | NaN |
Object(任意クラス) | null |
型宣言なし | undefined |
型ごとにデフォルト値が決まっているので、型を指定しておけば不定値はないのですが、型を指定しない場合はundefinedという特別な値が設定されます。
undefined
変数の値をいじった後でundefinedを変数に代入するとどうなるか試してみました。
結果は、undefinedを代入するとデフォルト値が設定されます。
ECMA-262仕様によると、undefinedは文字列型にキャストしたときは"undefined"、数値型にキャストしたときはNaNを返すらしいです。このため、てっきりundefinedの代入は、undefinedをキャストした値が入るかと思いきや、デフォルト値が設定される挙動になりました。下記のStringの結果をみると、undefined代入後は文字列"undefined"ではなくデフォルト値nullが入っています。
var b:Boolean = true; trace(b); // => true b = undefined; trace(b); // => false var s:String = "hoge"; trace(s); // => hoge s = undefined; trace(s); // => null "undefined"ではない var i:int = 100; trace(i); // => 100 i = undefined; trace(i); // => 0 var n:Number = 100; trace(n); // => 100 n = undefined; trace(n); // => NaN var o:Object = "hoge"; trace(o); // => hoge o = undefined; trace(o); // => null var undef = "hoge"; trace(undef); // hoge undef = undefined; trace(undef); // => undefined
nullとundefinedを==で比較するとtrueが返却されます。どうやらundefinedが比較時にnullに変換されるようです。===で比較した場合は、当然falseが返却されます。
// null is undefinedが表示される var undef; if(null == undef) { trace("null is undefined"); } // コンパイルすると警告を受ける // 1012: Null 型の変数は undefined にすることができません。値 undefined は Null に型強制された後で比較されます。 if(null == undefined) { }
ちなみに、undefinedをtypeofすると、文字列"undefined"が返却されます。
var undef; var str:String = typeof undef; trace(str + ", " + str.length); // => undefined
あと、関数でundefinedの引数や戻り値を指定したい場合は、*を指定します。
public function func(value:*):* { return value; }