数値を3桁区切りにする方法として、Number.prototype.toLocaleString
がありますが(例)、これにはいくつかの欠点があります。
- ロケールを明示しておかないと、思わぬ表記法になってしまう
- Safariが未対応
- 遅い
サイトのJavaScriptをプロファイリングしている際に偶然気づいたのですが、toLocaleString
で3桁区切りにするコードは、対応したどのブラウザでも、正規表現で同等なことを行うより、数十倍~ひどいときには1000倍の時間を要します。
// 想像を絶して遅い
function test1(val) {
return (+val).toLocaleString('ja');
}
// 意外とこっちのほうが高速
function test2(val) {
var arr;
arr = String(val).split('.');
arr[0] = arr[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,');
return arr.join('.');
}
jsPerfで測定してみたところ、ChromeやFirefoxで数倍から数十倍、IEに至っては1000倍の速度差で正規表現で書いたほうが速い、という結果になりました。
結論
toLocaleString
は、本当にロケールに合わせる時以外は不向き