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;
}