サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

ECMA-262準拠

ID: FN0309003 Product: Flash

Platform: All
Version: Flash MX 2004

Flash Player 7では一部実装が変更され、ECMA-262標準第3版(ECMA-262 Edition 3)への準拠をより強めています。ActionScript 2により可能になったクラスベースのプログラミング技術(New object-oriented programming model参照)に加えて、追加された機能もあり、一部の動作が変更されています。また、Flash Player 7にパブリッシュする場合でActionScript 2.0を使用しているときは、あるオブジェクト型を別の型にキャストすることも可能です[*1]。詳しくは、Casting objectsをご参照ください。これらの機能があるからといって、既存のスクリプトをアップデートする必要が生じる訳ではありません。しかし、これらを使用して、そのスクリプトをFlash Player 7にパブリッシュすることが可能です。そして、今後もそのスクリプトを修正・拡張していくことができます。

[訳者註*1] ActionScript 2.0では、使用する変数のオブジェクト型を宣言することができます。この機能は、「厳格な型づけ」(strict data typing)と呼ばれます。しかし場合によっては、データの型を変換しなければならないことがあります。この型を変換する処理を「キャスト」といいます。

上述の変更とは異なり、下表の変更(そのいくつかはECMA準拠を強化しています)は、既存のスクリプトが以前と異なる動作をする原因となりえます。これらの機能を既存のスクリプトで使用し、Flash Player 7にパブリッシュする場合には、変更点をご確認ください。そのうえで、コードが意図したとおりに動作するか、あるいはコードを変更する必要があるかどうかをお確かめください。とくに、undefinedが一定の場合に異なった評価をされるため、Flash Player 7に移行するスクリプト中のすべての変数は初期化する必要があります。

Flash Player 7にパブリッシュしたSWF 以前のバージョンのFlash PlayerにパブリッシュしたSWF
大文字小文字の区別がサポートされます(大文字小文字だけが異なる同一の変数名は、別の変数として解釈されます)。この変更は、#includeで読込むファイルやLoadVars.load()でロードした外部変数にも影響します。詳しくは、Case sensitivityをご参照ください。 大文字小文字の区別はサポートされません(大文字小文字だけが異なる同一の変数名は、同じ変数として解釈されます)。
数値コンテクストでundefinedを評価すると、NaNが返ります([訳者註] 以下の例で、myCountは未定義の変数です)[*2]。
myCount += 1;
trace(myCount);  // NaN
数値コンテクストでundefinedを評価すると、0が返ります[*2]。
myCount += 1;
trace(myCount);  // 1
undefinedをストリングに変換すると、結果は"undefined"になります。
firstname = "Joan ";
lastname = "Flender";
trace(firstname+middlename+lastname);  // Joan undefinedFlender
undefinedをストリングに変換すると、結果は""(空のストリング)になります。
firstname = "Joan ";
lastname = "Flender";
trace(firstname+middlename+lastname);  // Joan Flender
ストリングをブール(論理)値に変換すると、ストリングの長さ(length)が0より大きければ結果はtrueになります。空のストリングなら、結果はfalseになります。 ストリングをブール(論理)値に変換すると、ストリングはまず数値に変換されます。変換された数値が0でなければ、結果はtrueになります。それ以外はfalseになります。

配列の長さ(length)が設定される場合、有効なストリングの数字のみが長さを設定することになります。たとえば、"6"は有効で、" 6"や"6xyz"は無効です。
my_array = new Array();
my_array[" 6"] = "x";
trace(my_array.length);  // 0
my_array["6xyz"] = "x";
trace(my_array.length);  // 0
my_array["6"] = "x";
trace(my_array.length);  // 7

配列の長さが設定される場合、完全な数字でないストリングでも長さを設定することになります
my_array = new Array();
my_array[" 6"] = "x";
trace(my_array.length);  // 7
my_array["6xyz"] = "x";
trace(my_array.length);  // 7
my_array["6"] = "x";
trace(my_array.length);  // 7

[訳者註] スペースの使用や先頭を数字にするのは、識別子としては不適切です。


[訳者註*2] isNaN()関数で未定義変数(値がundefined)を調べた場合の戻り値も、Flash Player 7と6以前とで異なります。isNaN()関数は、引数を数値評価し、その結果がNaNの場合にtrueを、そうでないときはfalseを返します(ECMA-262第3版15.1.2.4「isNaN (number)」参照)。したがって、isNaN()関数にundefinedを引数として渡すと、つぎのような結果になります。

Flash Player 7にパブリッシュしたSWF 以前のバージョンのFlash PlayerにパブリッシュしたSWF

isNaN()関数に未定義変数を渡すと、trueを返します。
trace(isNaN(undefined)); // 出力: true

isNaN()関数に未定義変数を渡すと、falseを返します。
trace(isNaN(undefined)); // 出力: false

出典
Flash MX 2004 LiveDocs [Using ActionScript] > [What's New in Flash MX 2004 ActionScript] > [Porting existing scripts to Flash Player 7] > [ECMA-262 compliance]より邦訳。

_____

作成者: 野中文雄
更新日: 2005年2月8日 訳者註*2を追加
作成日: 2003年9月11日


Copyright © 2001-2003 Fumio Nonaka.  All rights reserved.