パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Javascriptの連想配列と配列」記事へのコメント

  • {}はオブジェクトで、[]は配列(のオブジェクト)です。仕様書のP.158を参照。
    # 本文中に解説は見当たらなかった...

    JavaScriptではオブジェクト≒連想配列で、配列は配列のオブジェクトという扱いになっているようです。Perlのオブジェクトに似てますね。
    • 誰かから返答をいただけるなんて思っていませんでした。(でもちょっと期待していた)
      ACさんありがとうございます! おかげさまで、根本的な誤解を解くことができました。

      >仕様書のP.158を参照。
      なるほどここ(PDF) [ecma-international.org]を見ればよかったのですね。

      > JavaScriptではオブジェクト≒連想配列
      これはなんとなく知っていました。

      >配列は配列のオブジェクト
      これを忘れていました! 配列といえどもオブジェクトだから、プロパティを持てるのですね。
      たとえば
      var arr=[];    // arrはArrayになる
      arr["a"]=123;  // arrのaというプロパティに代入
      これの2行目がaというプロパティへの代入だということを認識していなかったです。

      そうなると、「『for-in statement』で走る範囲や『[]』でのアクセス方法が『配列の要素』と『オブジェクトのプロパティ』の両方とも同じ扱いで混乱するな」
      と思って仕様書を見ると、そもそもArray Objectsの最初の部分(PDF) [ecma-international.org]に
      Array objects give special treatment to a certain class of property names. A property name P (in the form of
      a string value) is an array index if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not
      equal to 232−1.

      と書いてあるじゃないですか。配列の要素ってオブジェクトのプロパティの一種だったのですね。別物だと誤解していました。
      あースッキリ。ACさん改めてありがとうございます。
      親コメント
      • 激遅レスになってしまいましたが、改めて見直すと
        var aa=[];
        aa={"a":1, "b":2, "c":3};
        ここも指摘しておくべきだったかも。{}は新たなオブジェクトを生成するので、2行目は1行目で生成した配列を破棄して、新たなオブジェクトに置き換えています。なのでaaは配列ではなくなっていたのですね。

        # もう解決済みかもしれませんが、返答を読むと気になったので...

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

処理中...