IEではfor-in構文で列挙されないプロパティがある
for-in構文で余計なプロパティが出るという話は良く聞きますが、自分で設定しても出てこないプロパティがあるのは知りませんでした。
以下のように、いくつかプロパティを設定してfor-in構文で回してみました。
var object = { constructor: function() {}, prototype: function() {}, valueOf: function() {}, toString: function() {}, MyProperty: function() {} }; for (var i in object) { alert(i); }
結果、Firefoxでは5個全て列挙されたのですが、IE6ではconstructor,toString,valueOfを除いたprototype,MyPropertyの2個しか列挙されませんでした。prototypeが出ている辺りが何か不思議な感じ。
追記
DontEnum属性というものが付いているかららしいです。でも自分で設定したプロパティにまで付けて欲しくない希ガス。
他にもReadOnly属性、DontDelete属性、Internal属性というものがあるらしいです。http://codezine.jp/a/article.aspx?aid=220#s04
まだまだ知らないことがいっぱいあるなあ。