自分はこのあたり、いつも感覚的に使ってしまっているので(汗)、解釈が間違っているかもしれませんが、
「if(a_mc == true)」は、「MovieClip型の変数a_mcの中身」と「Boolean型の値true」は等しいかどうかの評価結果が真か偽かという事なので、この場合は偽に。
「if(a_mc)」は、MovieClip型の変数a_mcの中身の評価結果が真か偽かという事なので、undefinedやnullが入っていれば偽、それ以外のもの(参照?)が入っていれば真に、
といった感じなのでしょうか。
「感覚的に」とか言ってる自分が言うのは変ですが(汗)、慣れないうちは略さずに丁寧な記述を心がけたほうが、ミスも防げて良いのかもしれませんね。
気になったので、どういうのがtrueやfalseになるのか自分もAS2とAS3の両環境でやってみました。コードと各結果は下にありますので参考になれば幸いです。
このスレッドとは直接関係ありませんが、AS3環境では中身がundefinedではなくnullに置き換えられていて、結果がAS2の時と少し違っていました。
こういったところは、ちゃんと把握していないとバグが入り込みやすそうで、何だか不安になりますね(汗)。
----------------
以降は今回試したAS2とAS3のコードです。コメント部分は各行の出力結果になっています。
【AS2】
var mc0:MovieClip;
var mc1:MovieClip = undefined;
var mc2:MovieClip = null;
var mc3:MovieClip = this.createEmptyMovieClip("3_mc", this.getDepth() + 1);
//undefined undefined null _level0.main_mc.3_mc
trace("i "+ mc0 +" "+ mc1 +" "+ mc2 +" "+ mc3);
//false false false false
trace("i "+ (mc0 == true) +" "+ (mc1 == true) +" "+ (mc2 == true) +" "+ (mc3 == true));
//false false false false
trace("i "+ (mc0 == false) +" "+ (mc1 == false) +" "+ (mc2 == false) +" "+ (mc3 == false));
//false false false true
trace("i "+ Boolean(mc0) +" "+ Boolean(mc1) +" "+ Boolean(mc2) +" "+ Boolean(mc3));
//false false false true
trace("i "+ (Boolean(mc0) == true) +" "+ (Boolean(mc1) == true) +" "+ (Boolean(mc2) == true) +" "+ (Boolean(mc3) == true));
//true true true false
trace("i "+ (Boolean(mc0) == false) +" "+ (Boolean(mc1) == false) +" "+ (Boolean(mc2) == false) +" "+ (Boolean(mc3) == false));
//true true true false
trace("i "+ !mc0 +" "+ !mc1 +" "+ !mc2 +" "+ !mc3);
//false false false true
trace("i "+ !!mc0 +" "+ !!mc1 +" "+ !!mc2 +" "+ !!mc3);
//true true true false
trace("i "+ (mc0 == undefined) +" "+ (mc1 == undefined) +" "+ (mc2 == undefined) +" "+ (mc3 == undefined));
//true true true false
trace("i "+ (mc0 == null) +" "+ (mc1 == null) +" "+ (mc2 == null) +" "+ (mc3 == null));
//true true false false
trace("i "+ (mc0 === undefined) +" "+ (mc1 === undefined) +" "+ (mc2 === undefined) +" "+ (mc3 === undefined));
//false false true false
trace("i "+ (mc0 === null) +" "+ (mc1 === null) +" "+ (mc2 === null) +" "+ (mc3 === null));
//false false
trace("i "+ (undefined == true) +" "+ (null == true));
//false false
trace("i "+ (undefined == false) +" "+ (null == false));
//false false
trace("i "+ (Boolean(undefined) == true) +" "+ (Boolean(null) == true));
//true true
trace("i "+ (Boolean(undefined) == false) +" "+ (Boolean(null) == false));
//true true
trace("i "+ (!undefined == true) +" "+ (!null == true));
//false false
trace("i "+ (!undefined == false) +" "+ (!null == false));
//false false
trace("i "+ (!!undefined == true) +" "+ (!!null == true));
//true true
trace("i "+ (!!undefined == false) +" "+ (!!null == false));
【AS3】
var mc0:MovieClip;
var mc1:MovieClip = undefined;
var mc2:MovieClip = null;
var mc3:MovieClip = new MovieClip();
//null null null [object MovieClip]
Log.trace("i "+ mc0 +" "+ mc1 +" "+ mc2 +" "+ mc3);
//false false false false
Log.trace("i "+ (mc0 == true) +" "+ (mc1 == true) +" "+ (mc2 == true) +" "+ (mc3 == true));
//false false false false
Log.trace("i "+ (mc0 == false) +" "+ (mc1 == false) +" "+ (mc2 == false) +" "+ (mc3 == false));
//false false false true
Log.trace("i "+ Boolean(mc0) +" "+ Boolean(mc1) +" "+ Boolean(mc2) +" "+ Boolean(mc3));
//false false false true
Log.trace("i "+ (Boolean(mc0) == true) +" "+ (Boolean(mc1) == true) +" "+ (Boolean(mc2) == true) +" "+ (Boolean(mc3) == true));
//true true true false
Log.trace("i "+ (Boolean(mc0) == false) +" "+ (Boolean(mc1) == false) +" "+ (Boolean(mc2) == false) +" "+ (Boolean(mc3) == false));
//true true true false
Log.trace("i "+ !mc0 +" "+ !mc1 +" "+ !mc2 +" "+ !mc3);
//false false false true
Log.trace("i "+ !!mc0 +" "+ !!mc1 +" "+ !!mc2 +" "+ !!mc3);
//true true true false
Log.trace("i "+ (mc0 == undefined) +" "+ (mc1 == undefined) +" "+ (mc2 == undefined) +" "+ (mc3 == undefined));
//true true true false
Log.trace("i "+ (mc0 == null) +" "+ (mc1 == null) +" "+ (mc2 == null) +" "+ (mc3 == null));
//false false false false
Log.trace("i "+ (mc0 === undefined) +" "+ (mc1 === undefined) +" "+ (mc2 === undefined) +" "+ (mc3 === undefined));
//true true true false
Log.trace("i "+ (mc0 === null) +" "+ (mc1 === null) +" "+ (mc2 === null) +" "+ (mc3 === null));
//false false
Log.trace("i "+ (undefined == true) +" "+ (null == true));
//false false
Log.trace("i "+ (undefined == false) +" "+ (null == false));
//false false
Log.trace("i "+ (Boolean(undefined) == true) +" "+ (Boolean(null) == true));
//true true
Log.trace("i "+ (Boolean(undefined) == false) +" "+ (Boolean(null) == false));
//true true
Log.trace("i "+ (!undefined == true) +" "+ (!null == true));
//false false
Log.trace("i "+ (!undefined == false) +" "+ (!null == false));
//false false
Log.trace("i "+ (!!undefined == true) +" "+ (!!null == true));
//true true
Log.trace("i "+ (!!undefined == false) +" "+ (!!null == false));
※AS3環境ではビルド時、以下の警告がでました。
Main.as(27): col: 112 警告: MovieClip 型の変数は undefined にすることができません。値 undefined は MovieClip に型強制された後で比較されます。
Log.trace("i " + (mc0 == undefined) + " " + (mc1 == undefined) + " " + (mc2 == undefined) + " " + (mc3 == undefined));
^
Main.as(30): col: 115 警告: MovieClip 型の変数は undefined にすることができません。値 undefined は MovieClip に型強制された後で比較されます。
Log.trace("i " + (mc0 === undefined) + " " + (mc1 === undefined) + " " + (mc2 === undefined) + " " + (mc3 === undefined));
^
Main.as(33): col: 59 警告: null の比較が無効です。Boolean 型の変数は null にすることができません。
Log.trace("i " + (undefined == true) + " " + (null == true));
^
Main.as(34): col: 60 警告: null の比較が無効です。Boolean 型の変数は null にすることができません。
Log.trace("i " + (undefined == false) + " " + (null == false));
^
----------------
:961832p:
- だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー