Array.prototype.toLocaleString()

toLocaleString() メソッドは、配列の要素を表す文字列を返します。配列の要素は、それぞれの toLocaleString メソッドを使い、ロケール固有の文字列に変換されます (例えばカンマ “,”など)。

構文

arr.toLocaleString([locales[, options]]);

引数

locales Optional
BCP 47 言語タグの文字列か、その配列です。locales 引数の一般的な形式と解釈については Intl ページを参照してください。
options Optional
設定プロパティのオブジェクトです。数値に関しては Number.prototype.toLocaleString() を、日付に関しては Date.prototype.toLocaleString() を見てください。

返値

配列の要素を表す文字列です。

ポリフィル

// https://tc39.github.io/ecma402/#sup-array.prototype.tolocalestring
if (!Array.prototype.toLocaleString) {
  Object.defineProperty(Array.prototype, 'toLocaleString', {
    value: function(locales, options) {
      // 1. Let O be ? ToObject(this value).
      if (this == null) {
        throw new TypeError('"this" is null or not defined');
      }

      var a = Object(this);

      // 2. Let len be ? ToLength(? Get(A, "length")).
      var len = a.length >>> 0;

      // 3. Let separator be the String value for the 
      //    list-separator String appropriate for the 
      //    host environment's current locale (this is 
      //    derived in an implementation-defined way).
      // NOTE: In this case, we will use a comma
      var separator = ',';

      // 4. If len is zero, return the empty String.
      if (len === 0) {
        return '';
      }

      // 5. Let firstElement be ? Get(A, "0").
      var firstElement = a[0];
      // 6. If firstElement is undefined or null, then
      //  a.Let R be the empty String.
      // 7. Else,
      //  a. Let R be ? 
      //     ToString(? 
      //       Invoke(
      //        firstElement, 
      //        "toLocaleString", 
      //        « locales, options »
      //       )
      //     )
      var r = firstElement == null ? 
        '' : firstElement.toLocaleString(locales, options);

      // 8. Let k be 1.
      var k = 1;

      // 9. Repeat, while k < len
      while (k < len) {
        // a. Let S be a String value produced by 
        //   concatenating R and separator.
        var s = r + separator;

        // b. Let nextElement be ? Get(A, ToString(k)).
        var nextElement = a[k];

        // c. If nextElement is undefined or null, then
        //   i. Let R be the empty String.
        // d. Else,
        //   i. Let R be ? 
        //     ToString(? 
        //       Invoke(
        //        nextElement, 
        //        "toLocaleString", 
        //        « locales, options »
        //       )
        //     )
        r = nextElement == null ? 
          '' : nextElement.toLocaleString(locales, options);

        // e. Let R be a String value produced by 
        //   concatenating S and R.
        r = s + r;

        // f. Increase k by 1.
        k++;
      }

      // 10. Return R.
      return r;
    }
  });
}

Object.defineProperty が利用できないとても古い JavaScript エンジンをサポートする必要がある場合、Array.prototype のメソッドを polyfill するのは避けたほうがよいでしょう。それらを列挙不可にすることができないからです。

locales と options の使用

配列の要素は、その toLocaleString メソッドを使用して文字列に変換されます。

prices 配列内の文字列と数値の通貨を常に表示します。

var prices = ['¥7', 500, 8123, 12]; 
prices.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });

// "¥7,¥500,¥8,123,¥12"

さらに多くの例を知りたいなら、 Intl や NumberFormatDateTimeFormat ページを見てください。

仕様書

仕様書
ECMAScript (ECMA-262)
Array.prototype.toLocaleString の定義
ECMAScript Internationalization API (ECMA-402)
Array.prototype.toLocaleString の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
toLocaleStringChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 5.5Opera 完全対応 4Safari 完全対応 1WebView Android 完全対応 ≤37Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
Optional locales parameterChrome 完全対応 24Edge 完全対応 79Firefox 完全対応 52IE 未対応 なしOpera 完全対応 15Safari 完全対応 6.1WebView Android 完全対応 ≤37Chrome Android 完全対応 25Firefox Android 未対応 なしOpera Android 完全対応 14Safari iOS 完全対応 6.1Samsung Internet Android 完全対応 2.0nodejs 完全対応 13.0.0
完全対応 13.0.0
部分対応 0.12
補足
補足 Before version 13.0.0, only the locale data for en-US is available by default. When other locales are specified, the function silently falls back to en-US. To make full ICU (locale) data available for versions prior to 13, see Node.js documentation on the --with-intl option and how to provide the data.
Optional options parameterChrome 完全対応 24Edge 完全対応 79Firefox 完全対応 52IE 未対応 なしOpera 完全対応 15Safari 完全対応 6.1WebView Android 完全対応 ≤37Chrome Android 完全対応 25Firefox Android 未対応 なしOpera Android 完全対応 14Safari iOS 完全対応 6.1Samsung Internet Android 完全対応 2.0nodejs 完全対応 0.12

凡例

完全対応  
完全対応
未対応  
未対応
実装ノートを参照してください。
実装ノートを参照してください。

関連情報