メモログ

塵が積もって山とならないメモのログ

IE8のDontEnum bug

ECMAScript DontEnum attribute | MDNとか、_.extend should work-around JScript’s DontEnum bug ? Issue #60 ? jashkenas/underscoreとか、internet explorer - IE8 bug in for-in JavaScript statement? - Stack Overflowあたり参照。well known JScript bug らしい。

Moment.jsの2.2.xでは、IE8でmoment().valueOf()をしてもtime valueが返ってこないというissueがあります。developでは修正されているので、たぶんもうすぐ出るであろう2.3では修正されているはず。

なぜIE8でvalueOfがうまく動かなかったのかは、どうも上記の問題によるものみたい。Objectのプロパティ、toStringとかvalueOfとかが、列挙不可になっているため、for in のループでそれらのプロパティが入ってこない。なので、下記のようにObjectのプロパティを別途extendするようになった。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function extend(a, b) {
for (var i in b) {
if (b.hasOwnProperty(i)) {
a[i] = b[i];
}
}

if (b.hasOwnProperty("toString")) {
a.toString = b.toString;
}

if (b.hasOwnProperty("valueOf")) {
a.valueOf = b.valueOf;
}

return a;
}

というメモ。