ActionScript理解度テスト【その2解答編】Code Comprehension(1/2 ページ)

各プログラミング言語に精通した方の監修の下、それぞれの言語に関する知識や認識についての習熟度や理解度を確認する「Code Comprehension」。ActionScript理解度【その2】の解答です。

» 2008年05月14日 06時55分 公開
[新藤愛大,ITmedia]

問11.E4Xの罠

var xml:XML =

 <items>

  <item type="hoge">a</item>

  <item type="fuga">b</item>

  <item type="hoge">c</item>

  <item>d</item>

  <item type="fuga">e</item>

 </items>;


trace(xml.item.(@type == "hoge"));


出力

ReferenceError: Error #1065: 変数 @type は定義されていません。


 type属性が"hoge"のitemだけが取り出せる……と思いきやエラーが出る例。ひとつでもtype属性が入っていないitem(ここではd)が紛れ込んでいると、参照エラーになる。解決方法はこちらのエントリのコメント欄などを参照してください。

問12.xmlnsの罠

var xml:XML =

 <x xmlns="http://items.libspark.org/">

      <items>

  <item type="hoge">   a</item>

  <item type="fuga">

     b

    </item>

  <item type="hoge">c    </item>

</items>

 </x>;


XML.prettyIndent = 8;

XML.ignoreWhitespace = false;

XML.prettyPrinting = false;


trace(xml.items.toString());

trace(xml.items.toXMLString());


出力

※何も出力されません

 XMLの整形の問題かと思いきや、実はxmlnsが設定されているせいでitemsが参照できないという問題。次のようにdefault xml namespaceを設定することで、正しく取得できるようになります。

var xml:XML =

 <x xmlns="http://items.libspark.org/">

      <items>

  <item type="hoge">   a</item>

  <item type="fuga">

     b

    </item>

  <item type="hoge">c    </item>

</items>

 </x>;


default xml namespace = new Namespace("http://items.libspark.org/");


XML.prettyIndent = 8;

XML.ignoreWhitespace = false;

XML.prettyPrinting = false;


trace(xml.items.toString());

trace(xml.items.toXMLString());


問13.カンマ演算子

var a:uint;

trace((a = 4, 5, 6));

trace(a);


出力

6

4


 この問題については、こちらを参照するとよいでしょう。

問14.比較

var a:Object = "1";

var b:Object = 1;

var c:Number;

trace(a == a);

trace(b == a);

trace(a === b);

trace(b === a);

trace(c == NaN);

trace(c === NaN);


出力

true

true

false

false

false

false


 ==で比較をした場合は、型が暗黙的に変換されて比較が行われますが、===で比較をした場合は、型も一致していないとtrueになりません。数値がNaNであるかどうかを、== NaNで比較することはできません(常にfalseとなります)。isNaN関数を使うようにしましょう。

問15.識別子の大文字小文字区別

function Escape(value:String):String

{

    return value.replace(/\\/, '\\\\');

}


trace(escape('\\2000'));


出力

%5C2000


 識別子の大文字小文字は区別されるので、Escapeではなく、実際には組み込み関数のescapeが呼び出されます。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ