問答収集 カテゴリ:Flashプログラミング
現在のスレッド一覧 / 新規に質問を投稿
レス数:4 / 状態:解決済み / No:34 / ATOM
1 名前:もこなあぱぱぱ 日付:2010/07/06(火)16:26:26 ID:uzHOcKIQVu3G
こんにちは、よろしくお願いします。

配列リテラルを直接操作してメソッドを呼び出そうとすると
エラーになってしまうモノがあったのですが、どうしてでしょうか?
バグでしょうか?

-----------------------------------------
■正しく動くケース

trace([0,1,2,3].indexOf(2)); // 2

■エラーになるケース

[0,1,2,3].forEach(
  function(item:*,idx:int,arr:Array):void
  {
    trace(item);
  }
);
//コンパイルエラーの内容
//1084: シンタックスエラー : identifier が dot の前に必要です。
//1065: メタデータ属性が複数のエレメントを持つことはできません。
-----------------------------------------

ちなみに、リテラルを括弧()で囲むと動くようにもなりました
[0,1,2,3] → ([0,1,2,3])
これって、()だけでも内部で型キャストができるということなのでしょうか

恐れ入りますが、ご教示願います
2 日付:2010/07/06(火)19:21:16 ID:qPr0YUEfJmUW
[0,1,2,3].indexOf(2);// エラー
var v = [0,1,2,3].indexOf(2);// エラーなし

なんでしょう。謎です。
アクセスできない配列を作っても怒られますね。
3 名前:もこなあぱぱぱ 日付:2010/07/07(水)12:04:06 ID:uzHOcKIQVu3G
ご返答ありがとうございます。

メソッドや記述方法によってエラーが出たり出なかったりするのは
やはり釈然としないですよね。

とりあえずの処置として、配列リテラルを直接操作する際は
()で囲んで扱うように気をつけていこうと思います。

-----------------------------------------
■このような感じで

([]).concat([0]).concat([1]).concat([2]).concat([3]).forEach(
  function(item:*,idx:int,arr:Array):void
  {
    trace(item);
  }
);
//出力
//0
//1
//2
//3
-----------------------------------------

ありがとうございました
4 名前:状態変更 日付:2010/07/07(水)12:05:24 ID:uzHOcKIQVu3G
この質問の状態を『解決』に変更しました。
このスレッドについて
質問の状態 :
解決済み
投稿開始日 :
2010/07/06(火)16:26:26
投稿終了日 :
2010/07/07(水)12:05:24
投稿者 :
もこなあぱぱぱ
レス総数 :
4
スレッド番号 :
34
MondoCollectionSystem ver.0x00020000 by Hakuhin