メモログ

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

というメモ。

私について

Yutaka Yamaguchi
東京在住。TypeScript, Node.js, Reactなどフロンエンドが主力。Perlも書く。SwiftやRubyも過去には使ってた。過去のTOEIC 860くらい。