Array.prototype.toLocaleString()

Метод toLocaleString() повертає рядок, що відображає елементи масиву. Елементи перетворюються у рядки, використовуючи свої методи toLocaleString, і ці рядки розділяються символами, що відповідають локалі (наприклад, комою “,”).

Синтаксис

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

Параметри

locales Optional
Рядок з міткою мови BCP 47 або масив таких рядків. Щодо загального вигляду та інтерпретації аргументу locales дивіться  Intl.
options Optional
Об'єкт з властивостями конфігурації, для числових значень дивіться Number.prototype.toLocaleString(), а для дат Date.prototype.toLocaleString().

Значення, що повертається

Текстовий рядок, що відображає елементи масиву.

Приклади

Використання locales та options

Елементи масиву перетворюються на рядки, використовуючи свої методи toLocaleString.

Завжди відображати знак валюти для рядків та чисел у масиві prices:

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

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

Більше прикладів дивіться на сторінках Intl, NumberFormat та DateTimeFormat.

Поліфіл

// https://tc39.github.io/ecma402/#sup-array.prototype.tolocalestring
if (!Array.prototype.toLocaleString) {
  Object.defineProperty(Array.prototype, 'toLocaleString', {
    value: function(locales, options) {
      // 1. Нехай O дорівнює ? ToObject(this value).
      if (this == null) {
        throw new TypeError('"this" is null or not defined');
      }

      var a = Object(this);

      // 2. Нехай len дорівнює ? ToLength(? Get(A, "length")).
      var len = a.length >>> 0;

      // 3. Нехай separator дорівнює рядковому значенню 
      //    роздільника елементів списку згідно поточної
      //    локалі середовища виконання (це значення
      //    визначається реалізацією).
      // ЗАУВАГА: В даному випадку ми використовуємо кому
      var separator = ',';

      // 4. Якщо len дорівнює нулю, повернути порожінй рядок.
      if (len === 0) {
        return '';
      }

      // 5. Нехай firstElement дорівнює ? Get(A, "0").
      var firstElement = a[0];
      // 6. Якщо firstElement дорівнює undefined або null, тоді
      //  a. Нехай R дорівнює порожньому рядку.
      // 7. Інакше,
      //  a. Нехай R дорівнює ? 
      //     ToString(? 
      //       Invoke(
      //        firstElement, 
      //        "toLocaleString", 
      //        « locales, options »
      //       )
      //     )
      var r = firstElement == null ? 
        '' : firstElement.toLocaleString(locales, options);

      // 8. Нехай k дорівнює 1.
      var k = 1;

      // 9. Повторювати, доки k < len
      while (k < len) {
        // а. Нехай S дорівнює рядковому значенню, утвореному
        //   об'єднанням R та separator.
        var s = r + separator;

        // б. Нехай nextElement дорівнює ? Get(A, ToString(k)).
        var nextElement = a[k];

        // в. Якщо nextElement дорівнює undefined або null, тоді
        //   i. Нехай R дорівнє порожньому рядку.
        // г. Інакше,
        //   i. Нехай R дорівнює ? 
        //     ToString(? 
        //       Invoke(
        //        nextElement, 
        //        "toLocaleString", 
        //        « locales, options »
        //       )
        //     )
        r = nextElement == null ? 
          '' : nextElement.toLocaleString(locales, options);

        // ґ. Нехай R дорівнює рядковому значенню, утвореному
        //   об'єднанням S та R.
        r = s + r;

        // д. Збільшити k на 1.
        k++;
      }

      // 10. Повернути R.
      return r;
    }
  });
}

Якщо вам потрібно підтримувати зовсім застарілі рушії JavaScript, які не підтримують Object.defineProperty, краще взагалі не використовувати поліфіли методів Array.prototype, оскільки ви не зможете зробити їх не перелічуваними.

Специфікації

Специфікація Статус Коментар
ECMAScript (ECMA-262)
The definition of 'Array.prototype.toLocaleString' in that specification.
Living Standard Початкове визначення було надане у ECMAScript 3.
ECMAScript Internationalization API (ECMA-402)
The definition of 'Array.prototype.toLocaleString' in that specification.
Living Standard Це визначення замінює визначення, надане у ECMA-262.

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
toLocaleStringChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 5.5Opera Full support 4Safari Full support 1WebView Android Full support ≤37Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100
Optional locales parameterChrome Full support 24Edge Full support 79Firefox Full support 52IE No support NoOpera Full support 15Safari Full support 6.1WebView Android Full support ≤37Chrome Android Full support 25Firefox Android No support NoOpera Android Full support 14Safari iOS Full support 6.1Samsung Internet Android Full support 2.0nodejs Full support 13.0.0
Full support 13.0.0
Partial support 0.12
Notes
Notes 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 Full support 24Edge Full support 79Firefox Full support 52IE No support NoOpera Full support 15Safari Full support 6.1WebView Android Full support ≤37Chrome Android Full support 25Firefox Android No support NoOpera Android Full support 14Safari iOS Full support 6.1Samsung Internet Android Full support 2.0nodejs Full support 0.12

Legend

Full support  
Full support
No support  
No support
See implementation notes.
See implementation notes.

Див. також