ストリングの論理値評価 [Edit]

ストリングの評価はfalseが原則
ifアクションやBoolean関数あるいはBooleanオブジェクトで、ストリングの論理値を調べる場合があります。ストリングは、Number関数で数値に変換できる0以外の数字であればtrueと評価されます。他のストリングの論理値は、falseです(「ActionScript辞書」のBoolean(オブジェクト)の項には、「関数は数値(x)が0でなければtrueを返し」とありますが、意味がわかりません。誤訳でしょう)。

この仕様は、ECMA-262と異なることに注意が必要です(「ActionScript辞書」Boolean(オブジェクト)の項参照)。JavaScriptは、数字でない通常のストリングをtrueと評価します。

ifアクションの挙動不審
ifアクションでストリングを評価すると、挙動不審な素振りを見せることもあります。以下のスクリプトを実行してみます。

if ("a") {
trace ("true");
} else {
trace ("false");
}
trace (Boolean("a"));
a = "a";
if (a) {
trace ("true");
} else {
trace ("false");
}
trace (Boolean(a));

すべてストリング"a"の論理値を評価しています。ですから、都合4行のfalseが出力ウィンドウに表示されるはずです。ところが、Macintosh版のFlash 5では、最初の1行だけtrueが出力されます。つまりif("a")が、trueと評価されているということです。変数aにストリング"a"を代入してif(a)なら、初めに考えたとおり'false'になります。

ストリングを直接条件として指定することは意味がありませんので、実際上の問題にはなりにくいと思います。ただ、行く末に一抹の不安を残します。

ついでに、上記のActionScriptを記述して、「アクション」パネルを「エキスパートモード」から「ノーマルモード」に切換えると、if("a")のダブルクォーテーションが消えて、if(a)に勝手に変わります。余計なお節介はいいから、やることをやってほしいと思わずにはいれません。

その他の記事