2007-07-12

オブジェクトが持つプロパティの順序性について

JavaScriptのオブジェクトはプロパティを有していますが、このプロパティをfor inで取り出しす際の順序には、プロパティを定義した順に取り出されるというルールがあります。例えば次のオブジェクトのプロパティをfor inで取り出すとa、b、c、dの順に取り出されます。
var object = new Object();
object.a = 3;
object.b = 2;
object.c = 1;
object.d = 0;
世の中のJavaScriptのプログラムはこのルールを前提に作られているものも少なくないと思います。このルールはIEやNN(Firefox)、Operaなど需要ブラウザのJavaScriptエンジンで実装されているので基本的に問題は起こらないのですが、Rhinoでは問題になります。Rhinoでは上記のオブジェクトからfor inでプロパティを取り出すとc、d、a、bの順に取り出されます。値と定義の順序を変えても同じ順序で取り出されるので名前を元に何らかのルールでソートしているようです。
そのため、もしJ2SE 6.0のjrunscriptなどJavaScriptエンジンがRhinoの環境で動くプログラムを書く場合は、for inで取り出されるプロパティの順序に注意してコーディングする必要があります。

以下に私が把握している限りで、各JavaScriptエンジンのプロパティの順序性について示しておきます。(全てWindows環境のものです)

 ■プロパティの定義順
  • Internet Explorer
  • Netscape Navigator
  • Mozilla(Firefox)
  • Opera
  • Safari
  • Windows Script Host
 ■何らかのルールによる順序
  • Rhino


Learning  jQuery: Better Interaction Design and Web Development With Simple Javascript TechniquesLearning jQuery: Better Interaction Design and Web Development With Simple Javascript Techniques
Jonathan Chaffer Karl Swedberg

Jquery Reference Guide Jquery in Action 2ちゃんねるはなぜ潰れないのか? (扶桑社新書 14) デザイニング・インターフェース ―パターンによる実践的インタラクションデザイン 初めてのJavaScript―Ajax&DOM対応

by G-Tools

0 件のコメント: