Platform: All
Version: Flash MX 2004 and above
ActionScriptでは、処理の必要に応じて、データ型が自動的に変換されることがあります。本稿では、データをブール(論理)値[*1]として評価した場合に、値がどのように変換されるかをまとめています。
1. データがブール(論理)値として評価される場合
データをブール(論理)値として扱う典型的な場合は、ifステートメントの条件でしょう。if条件には、「式」を指定します。この場合の「式」は、論理式にかぎりません。変数/プロパティでも関数/メソッドでも、単純な数値などのプリミティブ値でも構いません。
if条件は、ブール(論理)値として評価されます。「評価」するというのは、指定されたコンテキストで、つまりこの場合ではブール(論理)値として、データを扱うために必要な処理や判定を加えて、結果の値を取得することです。ブール(論理)値コンテキストで評価した結果は、当然trueかfalseかのブール値でなければなりません。
つまり、if条件をブール(論理)値評価すると、条件としてどのような式が与えられたとしても、必ずtrueかfalseかどちらかの値が返されることになります。if条件に指定する式と、それを評価した結果については、F-site「if (condition=1)」をご参照ください。データをブール(論理)値評価する場合として、他には条件(3項)演算子? :や論理否定演算子!のオペランドなどが挙げられます。
2. データをブール(論理)値として評価した結果
各種のデータをブール(論理)値として評価した場合、どのような値に変換されるかは、以下の表001のとおりです[*2]。Flash Player 7から、ストリングについてFlash Player 6以前と扱いが変わったことにご注意ください(「ECMA-262準拠」参照)。
表001■データのブール(論理)値評価
データタイプ[*3] |
Flash Player 7以降にパブリッシュしたSWF |
Flash
Player 6以前にパブリッシュしたSWF |
undefined
(未定義値) |
false |
null |
false |
ブール(論理)値 |
変換されない(falseはfalse、trueはtrueのまま)。
|
数値 |
0とNaNはfalse、それ以外の数値はtrue。
|
文字列 |
空文字列(長さ0)であればfalse、それ以外の文字列はtrue。
|
0以外の数値に変換できればtrue、それ以外の文字列はfalse。
|
オブジェクト |
true |
[*2] 基本的に、ECMA-262標準第3版(ECMA-262 Edition 3)に準拠します。具体的には、「9.2 ToBoolean」がその仕様を定めます。Flash Player 6以前の文字列のブール(論理)値評価がECMA-262と異なるのは、Flash Player 4との互換性をはかるための仕様でした。
[*3] 前述注釈[*1]のECMA-262第3版は、厳密な型指定のないActionScript 1.0からの仕様ですから、「データタイプ」は型指定のデータ型とは異なります。むしろ、typeof演算子の戻り値に近いタイプ分けです。
たとえば、つぎのような例で、その違いが生じます(スクリプト001)。
スクリプト001■プリミティブ数値とNumberインスタンスとの違い
// var n:Number = 0; // [1]プリミティブ数値
var n:Number = new Number(0); // [2]Numberインスタンス
trace([typeof n, n instanceof Number]);
if (n) {
trace(true);
} else {
trace(false);
}
// [2]Numberインスタンスの場合の[出力]:
object,true
true
// [1]プリミティブ数値の場合の[出力]:
number,false
false
|
|
_____
作成者: 野中文雄
作成日: 2006年4月29日