最近質問を受けたので見てみたら Flash のヘルプドキュメントが古いのに気づいたので今日はこの話題です。(LiveDocs の AS3 リファレンス は最新です)
さて、まず下の例を考えてみます。
var foo:Boolean = true; var bar:Object = {}; trace(foo && bar); // 論理積 : 出力は [object Object] trace(foo || bar); // 論理和 : 出力は true
論理積と論理和の結果は、演算子の左側の式 (この場合は foo) の値で決定されます。ごく単純化すると、ルールは
論理積 (&&) : 左側の式が false なら左側の式の値、true なら右側の式の値 論理和 (||) : 左側の式が true なら左側の式の値、false なら右側の式の値
です。つまり、実際に論理演算が行われているわけではないのですね。演算結果の値も Boolean 型になるとは限りません。
さて、AS3 のプログラムでは Boolean もオブジェクトなので、左側の式を評価した後その値の型が何であっても同じルールを適用することができます (されます)。とにかく左辺の式を評価したら、結果を Boolean 型に変換して値を参照します。
それぞれの型を Boolean 型に変換した場合の値は以下のようになります。