スポンサーリンク

PHPと異なり,JavaScriptの連想配列とfor in構文には順序の概念がないので注意すること


JavaScriptの連想配列(=オブジェクト)には,順序がない。

なので,連想配列専用の構文である「for in」文で要素を取り出すときにも,順序が決まっていない。

配列(Arrayオブジェクト)ではないから。

JavaScriptの連想配列でソート | You Look Too Cool
http://stabucky.com/wp/archives/4598

  • JavaScriptでは正式には連想配列の順番はあてにしてはいけない


JavaScriptの連想配列に格納した順序 - ヒルズで働く@robarioの技ログ
http://d.hatena.ne.jp/holidays-l/2006...

  • 仕様書によると追加した順序が保証されない


for..in文 - 繰り返し処理 - JavaScript入門
http://www.ajaxtower.jp/js/for/index8...

  • どのような順番でプロパティが取り出されるのかは決まっていませんし指定することもできない


array.lengthってなに?|memememotwo
http://ameblo.jp/toki917/entry-115833...

  • for in文で出力 → 連想配列として出力 ・連想配列は順序という概念がない ⇒ 順番むちゃくちゃに出力


for...in - JavaScript | MDN
https://developer.mozilla.org/ja/docs...

  • 任意の順序で(順序は特に決まっていないということ)


オブジェクトのキーの順序 - hogehoge @teramako
http://d.hatena.ne.jp/teramako/201402...

  • 仕様として順序は保証していない。


JavaScriptのfor in構文による列挙の順序は,とくに決まっていないので,ブラウザによっても異なるし,バージョンによっても異なる:

情報システム備忘録: JavaScriptで連想配列(Object)のキーが並び変わる
http://haneco-haneco.blogspot.jp/2011...

  • Chromeで、JSONで受け取ったObjectをループで処理しようとしたら、Firefoxと処理される順番が違う


JavaScript プロパティの列挙 (Windows)
http://msdn.microsoft.com/ja-jp/libra...

  • for…in ステートメントを使う場合は、どのドキュメント モードでも、プロパティ列挙の順序が Windows Internet Explorer 8 から返される順序と異なる可能性があります。 たとえば、数値プロパティは数値以外のプロパティより前に列挙されるようになりました。


最近のブラウザでは「キーの登録順」にfor inで取り出されることが多くなっている。

ただし,ブラウザのバージョンが違えばそれとは異なる順序になるので注意。

JavaScriptのオブジェクト内の順番 - ねとめもー
http://nmm.blog.jp/archives/37655028....

  • 今の主なブラウザでは入れた順に取得できる


JavaScriptの配列向けのfor文と連想配列向けのfor in文を混同して,for inにも順序があると思ってしまう間違いは,PHPユーザによくある。

PHPでは連想配列も順序を持っているからだ。(Perlだと違う):

PHP、連想配列の並び順序あれこれ|マコトのおもちゃ箱 〜ぼへぼへ自営業者の技術メモ〜
http://piyopiyocs.blog115.fc2.com/blo...

  • PHPの場合 1.配列も連想配列 2.連想配列にも並び順の概念がある


PHP - 連想配列をキーと値のペアの配列にするちょっと気のきいた方法(かも) - Qiita
http://qiita.com/ktz_alias/items/1624...

  • phpの配列(連想配列)は順序保障されている


PHPで連想配列に値を入れ、以下のようにforeachで回すと、$data..
http://q.hatena.ne.jp/1248577019

  • perlの場合は連想配列はシンプルにキーから値を取り出すことのみを保証しているだけなので、 キーの順序は保証されない。


初心者のプログラミング体験記 [JavaScript] for-in構文にはご用心
http://torasukenote.blog120.fc2.com/b...

  • 普段からよくPHPを使っているのですが、そこでは配列も連想配列も見境なしにforeach構文を使っていました