IE8のfor文に関する挙動の問題点と対策

他のブラウザとIE8の違い

前回の記事「IE8で不具合」に触れておいたバグを修正しました。
今回は、このバグの原因となったfor文の挙動について、備忘録として書き残しておきます。

for...in文 (IE8以外のブラウザの場合)

for...in文を使って、オブジェクトのプロパティを取り出してみましょう。

 for (var i in { constructor: 12,
                    hasOwnProperty: 15
                  }) {
     console.log(i);
 }

もし、このコードをIE8以外のブラウザで実行すれば、コンソールには、

 construtor
 hasOwnProperty

と表示されます。

for...in文 (IE8の場合)

ところが、Win XPのIE8でさっきのコードを実行しますと、コンソールには、なにも表示されないのです。どういうことかというと、Object.prototypeで登録されてそうなプロパティが、IE8では無視されるようなのです。

SIEで修正

そこで、SIEでは、base.jsのmixメソッドを使うときには、constructorメソッドではなくて、initializeメソッドを用いるように改善しました。その結果、スペックを通るようになりました。

今後の予定

base.jsの高速化を試みます。また、IE8で、テストスイートのテストをします。