FirefoxとChromeで異なるDateとRegExpの違い
FirefoxとChromeでDateとRegExpの扱いが若干異なることで嵌ったのでメモ。
Date
FirefoxではDateをnewする際にDateをそのまま渡すと同じ値にならない。Chromeでは想定した通り同じ値になる。
Firefox
var date = new Date;
+date;
// 1420909365967
+new Date(date);
// 1420909365000
// 異なる値になっている
+new Date(+date);
// 1420909365967
// 同じ値になっている
Chrome
var date = new Date;
+date;
// 1420909757913
+new Date(date);
// 1420909757913
// 同じ値になっている
+new Date(+date);
// 1420909757913
// 同じ値になっている
RegExp
FirefoxとChromeでsourceの値が異なる場合がある。
Firefox
(new RegExp).source;
// ""
Chrome
(new RegExp).source;
// "(?:)"
ちなみに、Stringでキャストするとどちらも同じ値になる。
String(new RegExp);
// "/(?:)/"
どちらもECMA-262の仕様通りなんだろうか……