メモログ

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

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するようになった。

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;
}

というメモ。